Why binding a function to null context? - javascript
I am working with the following functions atm, but what confused me is why in function request, we need to bind sendRequest to null by doing sendRequest.apply(null, _arguments))?
In sendRequest definition, there is no this in it, does it not make its context binding meaningless?
function sendRequest(args = {}) {
args.data = _param(args.data);
args.method = args.method || 'GET';
args.error = isFunction(args.error) ? args.error : function () {};
args.success = isFunction(args.success) ? args.success : function () {};
args.parseResponse = args.hasOwnProperty('parseResponse') ? args.parseResponse : true;
const myXhr = new PostMessageProxyRequest();
if (args.method === 'GET') {
let queryString = '?';
if (args.url.indexOf('?') !== -1) {
queryString += '&';
}
args.url += queryString + args.data;
}
myXhr.open(args.method, baseUrl + args.url);
if (args.headers) {
for (const key in args.headers) {
if (args.headers.hasOwnProperty(key)) {
myXhr.setRequestHeader(key, args.headers[key]);
}
}
}
myXhr.setRequestHeader('Content-Type', CONTENT_TYPE.FORM);
function callError(status, response) {
if (args.parseResponse) {
try {
response = JSON.parse(response);
} catch (e) {} // eslint-disable-line no-empty
}
args.error.call(null, { status, response });
}
myXhr.onload = function () {
let content = myXhr.responseText;
if (myXhr.status >= 200 && myXhr.status <= 300) {
try {
if (content && content.length > 0 && args.parseResponse) {
content = JSON.parse(content);
}
try {
args.success.call(null, {
status: myXhr.status,
response: content
});
} catch (e) {
callError(-1, `${e.name} on success handler, msg: ${e.message}`);
}
} catch (e) {
callError(-1, `error parsing response: ${e.message}. Response: ${content}`);
}
} else {
callError(myXhr.status, content);
}
};
myXhr.onerror = function () {
callError(myXhr.status, myXhr.responseText);
};
myXhr.send(args.method === 'POST' || args.method === 'PUT' ? args.data : null);
}
function request(args = {}) {
const _arguments = arguments;
args.error = args.error || (() => {});
init()
.then(() => sendRequest.apply(null, _arguments))
.catch((options = {}) => args.error.call(null, options));
}
Related
Unhandled error Error: Data cannot be encoded in JSON error at firebase serverless functions
I'm trying to deploy an api for my application. Using these codes raises Unhandled error "Error: Data cannot be encoded in JSON. const functions = require("firebase-functions"); const axios = require("axios"); exports.getDatas = functions.https.onCall(async (d)=>{ functions.logger.log(d["name"]); cname = d["name"]; ts1=d["ts1"]; ts2=d["ts2"]; const data = await axios.get( "https://api.coingecko.com/api/v3/coins/" + cname + "/market_chart/range?vs_currency=usd&from=" + ts1 + "&to=" + ts2, ); functions.logger.log(data); return {data: data}; }); The error log is Unhandled error Error: Data cannot be encoded in JSON: function httpAdapter(config) { return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) { var onCanceled; function done() { if (config.cancelToken) { config.cancelToken.unsubscribe(onCanceled); } if (config.signal) { config.signal.removeEventListener('abort', onCanceled); } } var resolve = function resolve(value) { done(); resolvePromise(value); }; var rejected = false; var reject = function reject(value) { done(); rejected = true; rejectPromise(value); }; var data = config.data; var headers = config.headers; var headerNames = {}; Object.keys(headers).forEach(function storeLowerName(name) { headerNames[name.toLowerCase()] = name; }); // Set User-Agent (required by some servers) // See https://github.com/axios/axios/issues/69 if ('user-agent' in headerNames) { // User-Agent is specified; handle case where no UA header is desired if (!headers[headerNames['user-agent']]) { delete headers[headerNames['user-agent']]; } // Otherwise, use specified value } else { // Only set header if it hasn't been set in config headers['User-Agent'] = 'axios/' + VERSION; } if (data && !utils.isStream(data)) { if (Buffer.isBuffer(data)) { // Nothing to do... } else if (utils.isArrayBuffer(data)) { data = Buffer.from(new Uint8Array(data)); } else if (utils.isString(data)) { data = Buffer.from(data, 'utf-8'); } else { return reject(createError( 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream', config )); } if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) { return reject(createError('Request body larger than maxBodyLength limit', config)); } // Add Content-Length header if data exists if (!headerNames['content-length']) { headers['Content-Length'] = data.length; } } // HTTP basic authentication var auth = undefined; if (config.auth) { var username = config.auth.username || ''; var password = config.auth.password || ''; auth = username + ':' + password; } // Parse url var fullPath = buildFullPath(config.baseURL, config.url); var parsed = url.parse(fullPath); var protocol = parsed.protocol || 'http:'; if (!auth && parsed.auth) { var urlAuth = parsed.auth.split(':'); var urlUsername = urlAuth[0] || ''; var urlPassword = urlAuth[1] || ''; auth = urlUsername + ':' + urlPassword; } if (auth && headerNames.authorization) { delete headers[headerNames.authorization]; } var isHttpsRequest = isHttps.test(protocol); var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; var options = { path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''), method: config.method.toUpperCase(), headers: headers, agent: agent, agents: { http: config.httpAgent, https: config.httpsAgent }, auth: auth }; if (config.socketPath) { options.socketPath = config.socketPath; } else { options.hostname = parsed.hostname; options.port = parsed.port; } var proxy = config.proxy; if (!proxy && proxy !== false) { var proxyEnv = protocol.slice(0, -1) + '_proxy'; var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()]; if (proxyUrl) { var parsedProxyUrl = url.parse(proxyUrl); var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY; var shouldProxy = true; if (noProxyEnv) { var noProxy = noProxyEnv.split(',').map(function trim(s) { return s.trim(); }); shouldProxy = !noProxy.some(function proxyMatch(proxyElement) { if (!proxyElement) { return false; } if (proxyElement === '*') { return true; } if (proxyElement[0] === '.' && parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) { return true; } return parsed.hostname === proxyElement; }); } if (shouldProxy) { proxy = { host: parsedProxyUrl.hostname, port: parsedProxyUrl.port, protocol: parsedProxyUrl.protocol }; if (parsedProxyUrl.auth) { var proxyUrlAuth = parsedProxyUrl.auth.split(':'); proxy.auth = { username: proxyUrlAuth[0], password: proxyUrlAuth[1] }; } } } } if (proxy) { options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : ''); setProxy(options, proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path); } var transport; var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true); if (config.transport) { transport = config.transport; } else if (config.maxRedirects === 0) { transport = isHttpsProxy ? https : http; } else { if (config.maxRedirects) { options.maxRedirects = config.maxRedirects; } transport = isHttpsProxy ? httpsFollow : httpFollow; } if (config.maxBodyLength > -1) { options.maxBodyLength = config.maxBodyLength; } if (config.insecureHTTPParser) { options.insecureHTTPParser = config.insecureHTTPParser; } // Create the request var req = transport.request(options, function handleResponse(res) { if (req.aborted) return; // uncompress the response body transparently if required var stream = res; // return the last request in case of redirects var lastRequest = res.req || req; // if no content, is HEAD request or decompress disabled we should not decompress if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) { switch (res.headers['content-encoding']) { /*eslint default-case:0*/ case 'gzip': case 'compress': case 'deflate': // add the unzipper to the body stream processing pipeline stream = stream.pipe(zlib.createUnzip()); // remove the content-encoding in order to not confuse downstream operations delete res.headers['content-encoding']; break; } } var response = { status: res.statusCode, statusText: res.statusMessage, headers: res.headers, config: config, request: lastRequest }; if (config.responseType === 'stream') { response.data = stream; settle(resolve, reject, response); } else { var responseBuffer = []; var totalResponseBytes = 0; stream.on('data', function handleStreamData(chunk) { responseBuffer.push(chunk); totalResponseBytes += chunk.length; // make sure the content length is not over the maxContentLength if specified if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) { // stream.destoy() emit aborted event before calling reject() on Node.js v16 rejected = true; stream.destroy(); reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded', config, null, lastRequest)); } }); stream.on('aborted', function handlerStreamAborted() { if (rejected) { return; } stream.destroy(); reject(createError('error request aborted', config, 'ERR_REQUEST_ABORTED', lastRequest)); }); stream.on('error', function handleStreamError(err) { if (req.aborted) return; reject(enhanceError(err, config, null, lastRequest)); }); stream.on('end', function handleStreamEnd() { try { var responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer); if (config.responseType !== 'arraybuffer') { responseData = responseData.toString(config.responseEncoding); if (!config.responseEncoding || config.responseEncoding === 'utf8') { responseData = utils.stripBOM(responseData); } } response.data = responseData; } catch (err) { reject(enhanceError(err, config, err.code, response.request, response)); } settle(resolve, reject, response); }); } }); // Handle errors req.on('error', function handleRequestError(err) { if (req.aborted && err.code !== 'ERR_FR_TOO_MANY_REDIRECTS') return; reject(enhanceError(err, config, null, req)); }); // set tcp keep alive to prevent drop connection by peer req.on('socket', function handleRequestSocket(socket) { // default interval of sending ack packet is 1 minute socket.setKeepAlive(true, 1000 * 60); }); // Handle request timeout if (config.timeout) { // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types. var timeout = parseInt(config.timeout, 10); if (isNaN(timeout)) { reject(createError( 'error trying to parse `config.timeout` to int', config, 'ERR_PARSE_TIMEOUT', req )); return; } // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system. // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET. // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up. // And then these socket which be hang up will devoring CPU little by little. // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect. req.setTimeout(timeout, function handleRequestTimeout() { req.abort(); var transitional = config.transitional || defaults.transitional; reject(createError( 'timeout of ' + timeout + 'ms exceeded', config, transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED', req )); }); } if (config.cancelToken || config.signal) { // Handle cancellation // eslint-disable-next-line func-names onCanceled = function(cancel) { if (req.aborted) return; req.abort(); reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel); }; config.cancelToken && config.cancelToken.subscribe(onCanceled); if (config.signal) { config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); } } // Send the request if (utils.isStream(data)) { data.on('error', function handleStreamError(err) { reject(enhanceError(err, config, null, req)); }).pipe(req); } else { req.end(data); } }); } at encode (/workspace/node_modules/firebase-functions/lib/common/providers/https.js:162:11) at encode (/workspace/node_modules/firebase-functions/lib/common/providers/https.js:156:22) at encode (/workspace/node_modules/firebase-functions/lib/common/providers/https.js:156:22) at encode (/workspace/node_modules/firebase-functions/lib/common/providers/https.js:156:22) at /workspace/node_modules/firebase-functions/lib/common/providers/https.js:334:22 at processTicksAndRejections (internal/process/task_queues.js:97:5) First logger logs the parameter i gave correctly and the logger that logs data is in this format: ...["api.coingecko.com:443::::::::::::::::::"]},"keepAliveMsecs":1000,"maxFreeSockets":256,"scheduling":"fifo","keepAlive":false,"maxSockets":null},"_removedConnection":false,"writable":true},"status":200,"data":{"prices":[[1615345414698,37.27069164629981],[1615349310788,36.95627388647297],[1615352802175,37.48630338203377],[1615356202751,37.46442850999597],[1615360079361,37.642735963063906],[1615363905145,38.29435586902702],[1615367492353,38.313292928237594],[1615370461299,38.75503558097479],[1615374138056,38.24406575020552],[1615377815960,38.237026584388175],[1615381321332,38.93964664468625],[1615384813000,39.262646397955635],[1615388739874,39.15882057568881],[1615392094129,38.94488140309047],[1615395966875,38.79820936257378],[1615399312625,38.51637055616189],[1615403055037,38.59237008394828],[1615406529740,38.44087305010874],[1615410281814,37.71855645797291],[1615414278815,38.374824600586976],[1615417716420,38.4538669693684],[1615421045728,37.62772478442999],[1615425672990,36.8826465121472],[1615429587089,37.41958697414903],[1615432278494,37.34865694722488],[1615435254265,37.16289143388951],[1615439122292,37.14731463575248],[1615442523394,36.801517989796814],[1615446290102,37.02248224990424],[1615450361470,36.164787531097126],[1615453299572,36.46191265162147],[1615457172317,36.174755169666334],[1615460886498,37.05778010952229],[1615464298322,37.336909500902365],[1615469586325,37.56497212211488],[1615472126260,37.83046394206218],[1615474882979,37.252561357731096],[1615478498201,36.56190097084664],[1615482336185,36.83824760787625],[1615485957910,36.89351702770813],[1615489642151,37.589229946501746],[1615493390438,37.33184737771527],[1615496666244,37.29234576242379],[1615500577712,37.284260441548426],[1616866645601,1137195941.0307472],[1616870299925,1089416195.9864128],[1616873841648,1074341877.495249],[1616877368137,1061555457.3375872],[1616880970910,1077775411.1216433],[1616884693948,1064594490.6022671],[1616887998472,1087481667.611567],[1616891397951,1068140794.5197278],[1616894759953,1078753362.1719048],[1616898371565,1053546315.1245787],[1616902002474,1052498816.7223371],[1616905584364,1026915395.5541993],[1616909101481,1022271206.3215427],[1616912730390,997185793.1210617],[1616916434482,972130048.6316774],[1616919928611,988711196.2721183],[1616923534317,987299160.6191593],[1616926264719,975360472.6011684],[1616930074136,958327264.7346151],[1616933292776,935085970.8922312],[1616936940791,896217168.3654604],[1616940936847,878876312.6707534],[1616944090304,890504985.5476977],[1616948321869,896715385.5657766],[1616952007508,870767231.0865391],[1616955544207,880601758.4610194],[1616958381375,896794852.1077055],[1616962022167,929362788.5783823],[1616966479654,927502494.4691795],[1616969648773,880385481.5284289],[1616973545649,862329007.9935848],[1616977463095,840138544.6360805],[1616980359587,849727926.595521],[1616984356096,820616225.3306137],[1616987602367,898085663.0760688],[1616990444958,890215727.4112909],[1616995470635,914823340.6343507],[1616999032159,890922230.685704],[1617002651977,937214914.0703756],[1617005329558,976030203.3879734],[1617009370471,1061898884.4388478],[1617012348377,1111994349.2592206],[1617015705482,1175310227.1595278],[1617019895549,1217044915.3900926],[1617022941451,1204239369.9336267],[1617027118715,1225123359.1178432],[1617031210170,1191418570.9198012],[1617033728601,1257085051.9742537],[1617037882992,1261291734.3667347],[1617041858553,1265805909.4506621],[1617044547418,1261869965.5784621],[1617049418534,1225924891.220988],[1617052450394,1200646247.466799],[1617055896172,1209247034.0807025],[1617059684123,1249662106.3996315],[1617062561979,837849935.5380555],[1617066155823,1261094295.2039979],[1617070572708,1244044711.3556864],[1617074210159,1178503497.252399],[1617077106612,1184744920.254339],[1617080571662,1219164970.9205332],[1617084836477,1174744890.1399443],[1617087739776,1236332180.5454476],[1617092763739,1121685108.4046226],[1617096303391,1074005978.1362224],[1617100013739,1075898891.906641],[1617102136947,1041120230.0169744],[1617106411165,1021062028.7444541],[1617110588848,1004207600.6385714],[1617114148509,983098685.435342],[1617117449987,983878432.6976557],[1617120868725,943893192.0239582],[1617123806180,948379973.8680001],[1617128347360,948328240.0510467],[1617131244094,923477307.6495335],[1617134866719,918321070.6284192],[1617138697011,960178009.2986945],[1617142067857,974105207.7725881],[1617146083923,973959760.0729104],[1617149999086,959500047.5209063],[1617153094367,1007753562.6156206],[1617156698445,1021534121.1115336],[1617160175611,1028067427.0339341],[1617163928330,1007755251.8882328],[1617166924538,1023240773.0466446],[1617171886674,1037535813.1806505],[1617175133694,1101375379.7094195],[1617178435173,1136688478.90344],[1617182857658,1208366620.2561867],[1617185353773,1208823054.3509212],[1617188828477,1234197192.568771],[1617193393471,1707076315.380663],[1617196301983,1845668637.7358408],[1617199516026,1901877634.1385415],[1617203681947,2015292037.1305778],[1617207515426,2141098631.115179],[1617210224998,2343473154.2871637],[1617214323265,2329074198.4966955],[1617217968405,2461828129.1798186],[1617221653017,2493042958.539376],[1617224582971,2532015555.7692595],[1617228589364,2508661361.110037],[1617232204720,2590057969.924583],[1617235260464,2749780924.550207],[1617239367664,2791689438.967896],[1617243152558,2778422749.5901804],[1617246573894,2802892972.2612605],[1617250114952,2795446026.902383],[1617253276300,2837092221.188881],[1617257741390,2957061611.281718],[1617261111556,3025594776.954216],[1617264301698,3140730366.12618],[1617267704421,3230797741.627739],[1617272276500,3247001347.7404704],[1617275862720,3182990384.8873067],[1617279129292,2889317168.9977646],[1617283053665,2753527702.506779],[1617287046529,2700392654.8781624],[1617290204012,2616296684.424929],[1617293298853,2494255828.9768047],[1617296557242,2383424694.8900166],[1617301325511,2288268623.177356],[1617303766777,2297155897.636895],[1617307669347,2314935325.319679],[1617311721980,2259716784.056617],[1617314946823,2267889595.9127536],[1617319572007,2174169254.528509],[1617323182318,2097690604.8152165],[1617326033792,2110975746.1916978],[1617329489226,2126100629.800452],[1617332409284,2193182655.044224],[1617337211709,2199847063.5248647],[1617340611316,2167549077.601362],[1617344146863,2110348803.8388174],[1617347361962,2023115590.5637138],[1617351380142,1864316761.5098753],[1617354151186,1788973202.0040677],[1617359277447,1731207666.0376515],[1617361312976,1418566500.3106787],[1617366169158,1693859181.5518322],[1617369860769,1656689094.290342],[1617372306072,1660176536.7450612],[1617376754676,1722154482.4234965],[1617379285817,1915067128.493045],[1617383311995,1982773491.2907202],[1617387963188,1985155493.939231],[1617391564495,1827213471.6221747],[1617395202777,1932891922.7380657],[1617398214973,1937931474.560893],[1617401809690,1961473630.4188676],[1617405699909,1952347409.661483],[1617409553080,2172811188.054834],[1617412963837,2431917537.219363],[1617416445822,2666886575.1140027],[1617420431122,2769520722.4907126],[1617422613890,2797409323.779513],[1617427393260,2895546310.6951184],[1617431058021,2894169435.883223],[1617433696700,2651591430.614699],[1617437513773,3448548871.8910036],[1617441138039,3537764498.5278754],[1617444820385,3662623380.0181885],[1617448128419,3729999481.3895626],[1617452094944,3741683833.307362],[1617457034540,3761774670.321721],[1617460631688,3809173022.555833],[1617464335978,3711591162.8519845],[1617467879738,3759143118.4621553],[1617471447610,3693936894.7524076],[1617474960418,3833857114.2069917],[1617478639837,3888109113.59996],[1617482233320,3857034438.9984646],[1617485821346,3898924734.2645984],[1617489477282,3952661186.2182713],[1617493109729,4002501827.9437523],[1617495709286,3872814933.0218143],[1617499443431,3939579930.8108554],[1617503699037,3663106636.5813146],[1617507443725,3808705623.491391],[1617510706891,3786240536.055139],[1617512446242,3717882675.3539762],[1617516040645,3722966733.2957063],[1617519813304,3482249884.952562],[1617523351916,3345586253.508183],[1617526909722,3327000473.8244348],[1617530664916,3181835266.2617188],[1617534176048,3094776290.1306324],[1617537924632,3064167829.684326],[1617541493704,3112790145.252149],[1617545018360,2989449570.670528],[1617548594506,3016965749.017692],[1617552471191,2973530338.557288],[1617555933696,2759208177.1915674],[1617559387440,2662906186.1813793],[1617563034515,2521716547.9565806],[1617566483711,2454800946.788864],[1617570325792,2412175803.4922743],[1617573668989,2381142461.766321],[1617577282876,2228904400.2017546],[1617580896737,2203439508.717633],[1617584514686,2083961834.3200803],[1617588367701,1922511436.832222],[1617591869391,1816453643.1859522],[1617595346098,1783362433.1356776],[1617599069131,1767878927.408502],[1617602711113,1782121869.0062866],[1617606278078,1784322317.8294444],[1617609891135,1785304724.1970084],[1617613319383,1792007217.4012969],[1617617302304,1808002080.6732872],[1617620901014,1821923720.87615],[1617624265084,1769426364.6123836],[1617629555312,1731155926.337212],[1617631504259,1735378701.9021676],[1617635133537,1942437073.2385755],[1617638780500,1938122743.6976163],[1617642119732,1932182393.8447528],[1617645707597,1918416705.3436842],[1617649325384,1925855235.7182896],[1617653252063,1944708214.0244768],[1617656889033,1932665022.73478],[1617660329160,1943687775.1192245],[1617663683699,1971924479.2343264],[1617667435208,2101421530.2666874],[1617672769205,2175322213.812557],[1617674524812,2168578229.7784457],[1617678186353,2149217571.1759067],[1617681915267,2132725563.885806],[1617685469475,1907950838.2268875],[1617689189705,2026223167.4473426],[1617692670953,1991840998.8517568],[1617696101989,1958389716.0448081],[1617699877898,2027665770.2623076],[1617703590445,2045913908.1590445],[1617707076556,2057724347.183567],[1617710622851,1722203248.9530182],[1617714225215,2160140597.446546],[1617717905528,2192080372.5552874],[1617721488585,2199844279.449877],[1617724918808,2244159138.5689125],[1617728548093,2263548854.897557],[1617732187891,2106855536.9938018],[1617735969816,2268365061.664965],[1617739538518,1863113060.588111],[1617742875565,2296819840.9881096],[1617746516853,2308037223.56185],[1617750327052,2297405821.9954567],[1617754017835,2215648462.217197],[1617758617023,2112353884.9607923],[1617761085616,2094123582.0260437],[1617764518134,2101292245.7045105],[1617768287923,2104106865.0792534],[1617771810289,2127056476.4717],[1617775566730,2152196953.3590703],[1617778865860,2160666464.579131],[1617782881414,2201171213.1865735],[1617786249160,2203934869.139618],[1617789807394,2329117281.806726],[1617793383957,2333039138.899913],[1617796986959,2491205752.3653517],[1617800521125,2652604590.3673797],[1617804331429,2692817000.168284],[1617807822435,2121796914.212729],[1617811418506,2538097921.330415],[1617815037057,2572049083.87979],[1617818698211,2550478468.4248347],[1617822347031,2541491737.3311806],[1617825969097,2609118564.630648],[1617829326876,2651351577.1099257],[1617833305171,2429954572.560337],[1617837011298,2435043578.3313527],[1617840572965,2394428204.082167],[1617843841041,2446826032.07983],[1617848315742,2395082349.188743],[1617850339793,2376349751.741466],[1617852591890,2385498650.2366877],[1617855126472,2380054416.699361],[1617858732962,2424505564.216302],[1617862619633,2434391633.272485],[1617865876330,2410962812.9744062],[1617869233838,2516114320.406959],[1617872539799,2437748581.3302546],[1617876293610,2247205079.171164],[1617880005259,2149347865.150653],[1617883394235,1893777066.5168178],[1617886836203,1757412804.559377],[1617892197847,1668727963.8671286],[1617894162445,1631584545.4824028],[1617897737215,1596293896.725426],[1617901282046,1525523967.3370435],[1617905003853,1370316987.26801],[1617908631874,1358993841.079183],[1617912335250,1404691449.9164236],[1617915995319,1379405950.1047523],[1617919567600,1366246502.7408085],[1617923270275,1289254721.1461022],[1617926622919,1386402238.6371279],[1617930228859,1384851642.1789908],[1617933705891,1365548610.2907162],[1617937372258,1357266138.9978309],[1617941122560,1335764096.6047564],[1617944870896,1322495289.1105938],[1617948462328,1283751933.8339043],[1617951863802,1272489837.990008],[1617955666499,1259096045.8789752],[1617958890026,1247182948.0102005],[1617962609987,1220448763.9536679],[1617966256703,1222538618.147044],[1617969964555,1148194206.4734476],[1617973333279,1199996169.7479842],[1617977646106,1154935691.529977],[1617980504476,1144564005.003322],[1617984273306,1132822242.6037295],[1617987925282,1136733019.0246003],[1617991396077,1139090847.1565342],[1617994822351,1133169530.4839995],[1617998615234,1113274570.5832539],[1618002141094,1094805189.6349592],[1618005876460,1035579604.067034],[1618009282025,1090335224.3969038],[1618013035782,1063984405.5106469],[1618016519119,1058097513.8615906],[1618020114108,1065381128.0365001]]}} When this code invoked it logs data correctly but i can not return it at last. Anyone can help?
The problem appears to be that you're trying to return the entire Axios response. This cannot be serialised as JSON due to circular references. Simply return the response data instead. You can also make your URL construction simpler (and safer) using the params option exports.getDatas = functions.https.onCall(async ({ name, ts1, ts2 }) => { functions.logger.log(name); // 👇 note the destructure here const { data } = await axios.get( `https://api.coingecko.com/api/v3/coins/${encodeURIComponent(name)}/market_chart/range`, { params: { vs_currency: "usd", from: ts1, to: ts2, } } ); functions.logger.log(data); return { data }; });
How to get id from link using js
I'm using wschat wordpress plugin. I'm passing link with the conversation id. If there is conversation id we need to get id and activate the particular user conversation. I'm passing link as https://brookstone220.com/wp-admin/admin.php?page=wschat_chat&cid=3 and the js file will bw: admin_chat.js: import {WSChat, formatDate} from './chat'; import { AdminApiConnector } from './admin_api_connector'; import { AdminPusherConnector } from './admin_pusher_connector'; import { EVENTS } from './events'; import { EmojiButton } from '#joeattardi/emoji-button'; import UserMetaInfo from './components/user_meta_info.html' jQuery(document).ready(function() { const wrapper = jQuery('.wschat-wrapper'); if (wrapper.length === 0) { return; } const CONVERSATION_TEMPLATE = ` <div class="friend-drawer friend-drawer--onhover" data-conversation-id="{{CONVERSATION_ID}}"> <img class="profile-image" src="https://ui-avatars.com/api/?rounded=true&name=Guest" alt=""> <div class="text"> <h6>{{NAME}}</h6> <p class="last-message text-truncate">{{LAST_MESSAGE}}</p> </div> <span class="time small d-none">{{TIMESTAMP}}</span> <span class="unread-count badge rounded-pill align-self-center">{{UNREAD_COUNT}}</span> </div> <hr>`; const CHAT_BUBBLE_TEMPLATE = ` <div class="row g-0 w-100 message-item" data-message-id="{{MESSAGE_ID}}"> <div class="col-xs-10 col-md-9 col-lg-6 {{OFFSET}}"> <div class="chat-bubble chat-bubble--{{POS}}"> {{CONTENT}} </div> <span class="time">{{TIMESTAMP}}</span> </div> </div>`; const CONVERSATION_TEMPLATE_DEFAULTS = { '{{CONVERSATION_ID}}': '', '{{LAST_MESSAGE}}': 'left', '{{TIMESTAMP}}': '', '{{NAME}}': '', }; const BUBBLE_TEMPLATE_DEFAULTS = { '{{OFFSET}}': '', '{{POS}}': 'left', '{{CONTENT}}': '', '{{TIMESTAMP}}': '', '{{MESSAGE_ID}}': '', }; jQuery.ajaxSetup({ data: { wschat_ajax_nonce: wschat_ajax_obj.nonce } }); var chat = new WSChat(jQuery('.wschat-wrapper'), { connector: wschat_ajax_obj.settings.communication_protocol === 'pusher' ? AdminPusherConnector : AdminApiConnector, api: { endpoint: wschat_ajax_obj.ajax_url, interval: 3000, wschat_ajax_nonce: wschat_ajax_obj.nonce, pusher: { key: wschat_ajax_obj.settings.pusher.app_key, cluster: wschat_ajax_obj.settings.pusher.cluster, } }, alert: { url: wschat_ajax_obj.settings.alert_tone_url }, header: { status_text: wschat_ajax_obj.settings.widget_status === 'online' ? wschat_ajax_obj.settings.header_online_text : wschat_ajax_obj.settings.header_offline_text, } }); if (wschat_ajax_obj.settings) { for(let key in wschat_ajax_obj.settings.colors) { key && chat.$el.get(0).style.setProperty(key, '#' +wschat_ajax_obj.settings.colors[key]); } } setInterval(() => { chat.connector.start_conversation(); }, 5000); const chat_panel = chat.$el.find('.chat-panel'); const conversation_panel = chat.$el.find('.conversation-list'); const chat_panel_header = chat.$el.find('.chat-panel-header'); const chat_tray_box = chat.$el.find('.chat-box-tray'); const message_input = jQuery('#wschat_message_input'); const MESSAGE_INFO = { min: 0, max: 0, }; let PAST_REQUEST_IS_PENDING = false; let SCROLL_PAUSED = false; let DISABLE_SCROLL_LOCK = false; const SCROLL_OFFSET = 100; const replaceConversation = (conversation) => { let item = conversation_panel.find('[data-conversation-id='+conversation.id+']'); if (item.length === 0 ) { return false; } item.find('.time').text(conversation.updated_at); item.find('.last-message').text( conversation.recent_message ? conversation.recent_message.body.text : ''); item.find('.unread-count').text(conversation.unread_count || ''); if (conversation.is_user_online) { item.addClass('online'); } else { item.removeClass('online'); } return true; }; const sortConversation = () => { const new_conversation_panel = conversation_panel.clone(); const items = []; new_conversation_panel.find('[data-conversation-id]').each(function (i, item) { items.push(item); }); items.sort((a, b) => { let timestamp1 = jQuery(a).find('.time').html(); let timestamp2 = jQuery(b).find('.time').html(); return strToDate(timestamp2) - strToDate(timestamp1); }); new_conversation_panel.html(''); items.forEach((item) => { new_conversation_panel.append(item); }); conversation_panel.html(new_conversation_panel.html()); }; const strToDate = (timestamp) => { let [date1, time1] = timestamp.split(' '); date1 = date1.split('-'); time1 = time1.split(':'); return parseInt(date1.join('') + time1.join('')); }; const showNoConversation = () => { const no_conversation_alert = jQuery('.no-conversation-alert'); conversation_panel.append(no_conversation_alert.removeClass('d-none')); } chat.on(EVENTS.WSCHAT_ON_NO_CONVERSATIONS, () => { showNoConversation(); }); chat.on(EVENTS.WSCHAT_ON_FETCH_CONVERSATIONS, (conversations) => { conversations.forEach(conversation => { if (replaceConversation(conversation)) { return; } CONVERSATION_TEMPLATE_DEFAULTS['{{CONVERSATION_ID}}'] = conversation.id; CONVERSATION_TEMPLATE_DEFAULTS['{{NAME}}'] = conversation.user.meta.name; CONVERSATION_TEMPLATE_DEFAULTS['{{TIMESTAMP}}'] = formatDate(conversation.updated_at); CONVERSATION_TEMPLATE_DEFAULTS['{{LAST_MESSAGE}}'] = conversation.recent_message ? conversation.recent_message.body.text : ''; CONVERSATION_TEMPLATE_DEFAULTS['{{UNREAD_COUNT}}'] = conversation.unread_count || ''; let row_template = CONVERSATION_TEMPLATE; row_template = row_template.replace(new RegExp(Object.keys(CONVERSATION_TEMPLATE_DEFAULTS).join('|'), 'g'), match => CONVERSATION_TEMPLATE_DEFAULTS[match]); row_template = jQuery(row_template); if (conversation.is_user_online) { row_template = row_template.addClass('online'); } if (conversation.user && conversation.user.meta.avatar) { row_template.find('img.profile-image').attr('src', conversation.user.meta.avatar) } conversation_panel.append(row_template); }); sortConversation(); setTimeout(() => { let activeItem = conversation_panel.find('.active[data-conversation-id]').length activeItem === 0 && conversation_panel.find('[data-conversation-id]').eq(0).click(); }, 1000); }); chat.on(EVENTS.WSCHAT_ON_SET_CONVERSATION, (data) => { data.user && chat_panel_header.find('.username').text(data.user.meta.name); let info = chat.$el.find('.user-meta-info').html(UserMetaInfo); chat_panel_header.parent().removeClass('d-none') info.find('.name').html(data.user.meta.name); info.find('.browser').html(data.user.meta.browser); info.find('.os').html(data.user.meta.os); info.find('.device').html(data.user.meta.device); info.find('.url').html(data.user.meta.current_url); message_input.focus(); MESSAGE_INFO.min = 0; MESSAGE_INFO.max = 0; DISABLE_SCROLL_LOCK = true; resizeChat(); setTimeout(() => DISABLE_SCROLL_LOCK = false, 1000); }); chat.on(EVENTS.WSCHAT_ON_FETCH_MESSAGES, (data) => { for (let i = 0; i < data.messages.length; i++) { let row = data.messages[i]; if (row.is_agent === true) { BUBBLE_TEMPLATE_DEFAULTS['{{OFFSET}}'] = 'offset-lg-6 offset-md-3 offset-xs-2'; BUBBLE_TEMPLATE_DEFAULTS['{{POS}}'] = 'right'; } else { BUBBLE_TEMPLATE_DEFAULTS['{{OFFSET}}'] = ''; BUBBLE_TEMPLATE_DEFAULTS['{{POS}}'] = 'left'; } BUBBLE_TEMPLATE_DEFAULTS['{{MESSAGE_ID}}'] = row.id; BUBBLE_TEMPLATE_DEFAULTS['{{CONTENT}}'] = row.body.formatted_content; BUBBLE_TEMPLATE_DEFAULTS['{{TIMESTAMP}}'] = formatDate(row.created_at); let row_template = CHAT_BUBBLE_TEMPLATE; row_template = row_template.replace(new RegExp(Object.keys(BUBBLE_TEMPLATE_DEFAULTS).join('|'), 'g'), match => BUBBLE_TEMPLATE_DEFAULTS[match]); if (MESSAGE_INFO.min === 0) { chat_panel.append('<span data-message-id="0"></span>'); } if (MESSAGE_INFO.min > row.id) { chat_panel.find('[data-message-id='+MESSAGE_INFO.min+']').before(row_template); MESSAGE_INFO.min = row.id; } if (MESSAGE_INFO.max === 0 || MESSAGE_INFO.max < row.id) { chat_panel.find('[data-message-id='+MESSAGE_INFO.max+']').after(row_template); MESSAGE_INFO.max = row.id; scrollIfNotPaused(); } if (MESSAGE_INFO.min === 0) { scrollIfNotPaused(); } MESSAGE_INFO.min = MESSAGE_INFO.min || row.id; MESSAGE_INFO.max = MESSAGE_INFO.max || row.id; } if (DISABLE_SCROLL_LOCK === true) { scrollIfNotPaused(); } }); chat.on(EVENTS.WSCHAT_ON_PONG, (data) => { let drawer = chat_panel_header.find('.friend-drawer'); let row_template = conversation_panel.find('[data-conversation-id='+data.id+']'); let row_unread_count = row_template.find('.unread-count'); let header_unread_count = chat_panel_header.find('.unread-count'); chat_panel_header.find('.status').text(data.status); header_unread_count.text(data.unread_count); row_unread_count.text(data.unread_count || ''); if (data.unread_count) { header_unread_count.removeClass('d-none'); } else { header_unread_count.addClass('d-none'); } if (data.is_online) { drawer.addClass('online'); row_template.addClass('online'); } else { drawer.removeClass('online'); row_template.removeClass('online'); } }); const scrollIfNotPaused = () => { if (SCROLL_PAUSED === false || DISABLE_SCROLL_LOCK === true) { chat_panel[0].scrollTop = chat_panel[0].scrollHeight; } } const send_btn = jQuery('#wschat_send_message').on('click', function() { let msg = message_input.val(); if (msg.trim() === '' && chat.trigger(EVENTS.WSCHAT_CAN_SEND_EMPTY_MESSAGE, false, true) === false) { return false; } chat.sendMessage({ // Type is text by default now, it needs to changed based on the selection content wschat_ajax_nonce: wschat_ajax_obj.nonce, type: 'text', 'content[text]': message_input.val() }); message_input.val('').focus(); }); message_input.keyup(function(e) { e.key === 'Enter' && send_btn.click(); }); message_input.on('focus', function() { let unread_count = chat_panel_header.find('.unread-count').text(); if (parseInt(unread_count) > 0) { chat.trigger(EVENTS.WSCHAT_ON_READ_ALL_MESSAGE); } }); chat_panel_header.on('click', '.user-meta-info-toggle', function () { chat.$el.find('.conversation-wrapper .user-meta-info').toggleClass('d-none'); }); conversation_panel.on('click', '[data-conversation-id]', function() { chat_panel.html(''); let item = jQuery(this); let converssation_id = item.data('conversation-id'); conversation_panel.find('[data-conversation-id]').removeClass('active'); item.addClass('active') chat.connector.join_conversation(converssation_id); }); chat_panel.on('scroll', function () { if (DISABLE_SCROLL_LOCK) { SCROLL_PAUSED = false; return; } if (this.scrollTop < SCROLL_OFFSET) { if (PAST_REQUEST_IS_PENDING === false) { PAST_REQUEST_IS_PENDING = true; chat.connector.get_messages({ after: 0, before: MESSAGE_INFO.min }); setTimeout(() => PAST_REQUEST_IS_PENDING = false, 500); } } if (this.offsetHeight + this.scrollTop >= this.scrollHeight - SCROLL_OFFSET) { SCROLL_PAUSED = false; } else { SCROLL_PAUSED = true; } }); const resizeChat = () => { const window_height = jQuery(window).height() - chat.$el.offset().top; const height = window_height - ( chat_panel_header.height()*2 + chat_tray_box.height() ); conversation_panel.css({ 'min-height': height + 'px' }); chat_panel.css({ 'min-height': height + 'px' }); }; jQuery(window).resize(() => resizeChat()); resizeChat(); const emojiPicker = document.getElementById('wschat_emoji_picker'); const emoji = new EmojiButton({ style: 'twemoji', rootElement: emojiPicker.parentElement, position: 'top' }); emojiPicker.addEventListener('click', function() { emoji.togglePicker(); }); emoji.on('emoji', function(selection) { console.log(selection) message_input.val(message_input.val() + selection.emoji).focus(); setTimeout(() => message_input.focus(), 500) }); // Attachment toggler chat.$el.find('#attachment_picker').click(function (e) { e.preventDefault(); chat.$el.find('.attachment-list').toggleClass('show d-none'); }); chat.$el.find('.attachment-list').on('click','button', function () { chat.$el.find('#attachment_picker').click(); }); }); Can someone help me on this? How to get id using this js file and activate the conversation?
Here is what I used for my project to get URL parameters. var getParameter = function getParameter(param) { var pageURL = window.location.search.substring(1), // Get current URL substrings urlVars = pageURL.split('&'), // Split on all "&" for more than one. parameterName, i; for (i = 0; i < urlVars.length; i++) { // Get the value of the parameter. parameterName = urlVars[i].split('='); // Return the value of the parameter if it has the same name as param if (parameterName[0] === param) { return typeof parameterName[1] === undefined ? true : decodeURIComponent(parameterName[1]); } } return false; }; var cID = getParameter('cid');
"something went wrong" error on fucntion getfloat
This code works perfectly beside the last part , and I do not see where might be the error. I tested it, and the main problem is in Trade.prototype.getFloat maybe is the callback idk, (the Trade.prototype.getFloat I got it from a 3y post here on stack from other user). 3y problem: This code works perfectly besides this line: "inventory[asset.assetid].floatvalue = getFloat". As you can see it is situated in async mode, and this line initializes a request to get some value, but it cant get it couse value is undefined. I tested it, and the main problem in request, which is asynchronous too. So the answer is how to stop the async mode and wait the return of the request. 'use strict' const config = require('../config') const request = require('request') const async = require('async') const Trade = require('./index') const MAX_RETRIES = 3 const API_URL = 'https://api.steamapis.com/steam/inventory' Trade.prototype.getInventory = function getInventory(steamID64, appID, contextID, callback, retries) { request(`${API_URL}/${steamID64}/${appID}/${contextID}?api_key=${config.SteamApisKey}`, (error, response, body) => { if (!error && response.statusCode === 200) { const items = JSON.parse(body) const assets = items.assets const descriptions = items.descriptions const inventory = {} if (descriptions && assets) { async.forEach(descriptions, (description, cbDesc) => async.forEach(assets, (asset, cbAsset) => { if ( description.classid !== asset.classid || !description.tradable || !description.marketable || description.market_hash_name.indexOf('Souvenir') > -1 ) { return cbAsset() } if (typeof inventory[asset.assetid] !== 'undefined') { return cbAsset() } const type = Trade.prototype.getItemType(description.market_hash_name, description.type) const wear = Trade.prototype.getItemWear(description.market_hash_name) const inspect = Trade.prototype.getInspect(steamID64, asset.assetid, description.actions) const getFloat = Trade.prototype.getFloat(inspect, asset.assetid, function(_float){ var data = String(_float); inventory[asset.assetid].floatvalue = data; inventory[asset.assetid] = asset inventory[asset.assetid].item_type = type inventory[asset.assetid].item_wear = wear inventory[asset.assetid].inspect = inspect inventory[asset.assetid].data = { background: description.background_color, image: description.icon_url, tradable: description.tradable, marketable: description.marketable, market_hash_name: description.market_hash_name, type: description.type, color: description.name_color, }; return cbAsset(); }) })); } return callback(null, inventory) } let retry = retries if (typeof retries === 'undefined') { retry = 0 } retry += 1 if (retry <= MAX_RETRIES) { return Trade.prototype.getInventory(steamID64, appID, contextID, callback, retry) } let statusCode = null if (typeof response !== 'undefined' && typeof response.statusCode !== 'undefined') { statusCode = response.statusCode } return callback({ error, statusCode }) }) } Trade.prototype.getInventories = function getInventories(params, callback) { const inventories = {} async.each(params, (user, cb) => { Trade.prototype.getInventory(user.steamID64, user.appID, user.contextID, (err, data) => { inventories[user.id] = {} inventories[user.id] = { error: err, items: (!err) ? Object.keys(data).map(key => data[key]) : null, } cb() }) }, () => { callback(inventories) }) } Trade.prototype.getItemType = function getItemType(marketHashName, type) { if (marketHashName.indexOf('Key') !== -1) { return { value: 0, name: 'key' } } if (marketHashName.indexOf('★') !== -1) { return { value: 1, name: 'knife' } } if ( type.indexOf('Classified') !== -1 || type.indexOf('Contraband') !== -1 || type.indexOf('Covert') !== -1 ) { return { value: 2, name: 'rare_skin' } } if ( type.indexOf('Consumer Grade') !== -1 || type.indexOf('Base Grade') !== -1 || type.indexOf('Graffiti') !== -1 || type.indexOf('Sticker') !== -1 || type.indexOf('Industrial Grade') !== -1 ) { return { value: 4, name: 'misc' } } return { value: 3, name: 'weapon' } } Trade.prototype.getItemWear = function getItemWear(marketHashName) { if (marketHashName.indexOf('Factory New') !== -1) { return 'FN' } if (marketHashName.indexOf('Minimal Wear') !== -1) { return 'MW' } if (marketHashName.indexOf('Field-Tested') !== -1) { return 'FT' } if (marketHashName.indexOf('Well-Worn') !== -1) { return 'WW' } if (marketHashName.indexOf('Battle-Scarred') !== -1) { return 'BS' } return false } Trade.prototype.getInspect = function getInspect (steamID64, assetid, actions) { let inspectLink = null; if (actions) { for (const a in actions) { if (actions[a].name.indexOf('Inspect') !== -1) { inspectLink = actions[a].link inspectLink = inspectLink.replace('%owner_steamid%', steamID64) inspectLink = inspectLink.replace('%assetid%', assetid) } } } return inspectLink } Trade.prototype.getFloat = function getFloat (adding, callback) { request ("https://api.csgofloat.com:1738/?url=" + adding, (error, response, body) => { if (!error && response.statusCode == 200) { var floatBody = JSON.parse(body); var float = floatBody["iteminfo"]["floatvalue"]; var id = id; if (float != "") { callback(float); } else { return "wrong"; } } else { console.log('something goes wrong'); return "wrong"; } }); }
How to access to a function from world.js?
I'm trying to access to this.addScreenshotToReport from a function of world.js This is the code I been trying to export the world.js: module.exports = function() { var worldPath = path.join(config.paths.root, '../support/world') this.World = require(worldPath).World; } And i put this.addScreenshotToReport() to access in that specific tunction This is the code from world.js: function CustomWorld({attach, parameters}) { this.waitForTestController = testControllerHolder.get() .then(function(tc) { return testController = tc; }); this.attach = attach; this.setBrowser = function() { if (parameters.browser === undefined) { return 'chrome'; } else { return parameters.browser; } }; this.addScreenshotToReport = function() { if (process.argv.includes('--format') || process.argv.includes('-f') || process.argv.includes('--format-options')) { testController.takeScreenshot() .then(function(screenshotPath) { const imgInBase64 = base64Img.base64Sync(screenshotPath); const imageConvertForCuc = imgInBase64.substring(imgInBase64.indexOf(',') + 1); return attach(imageConvertForCuc, 'image/png'); }) .catch(function(error) { console.warn('The screenshot was not attached to the report'); }); } else { return new Promise((resolve) => { resolve(null); }); } }; The actual output is: TypeError: this.addScreenshotToReport is not a function
Run function if other end Vue, JS
I'm don't know how to run code if other end Function showAvailableTable refresh item and add data to vuex $store I need to run code from ////START to //// END if showAvailableTable() done correctly(axios add data to $store) how should I do it correctly? showAvailableTable () { var obj = this.firstStepData var nullCount = 0 var self = this for (var key in obj) { if (obj.hasOwnProperty(key) && obj[key] == null) { nullCount++ } } if (nullCount === 0) { var reservationId = this.firstStepData.restaurant.id var restaurantSize = this.firstStepData.tableSize.value var reservationDate = this.firstStepData.reservationDate var reservationTime = this.firstStepData.reservationTime axios .get(self.$store.state.apiUrl + 'reservation/tables/?size=' + restaurantSize + '&restaurant_id=' + reservationId + '&date=' + reservationDate + '&hour=' + reservationTime) .then(response => { this.$store.commit('updateRestaurantTableList', response.data) }) .catch(error => { console.log(error) }) this.$store.commit('updateShowTable', true) } }, Next function, this function booking table, I'm run this.showAvailableTable() to refresh data in $store firstStepBook (event, id) { this.showAvailableTable() ///////////////////START var isResData = false this.dataLoading = true for (var obj in this.restaurantTableList) { if (this.restaurantTableList[obj].id === id) { if (this.restaurantTableList[obj].res_tab.length > 0) { isResData = true } break } } if (isResData && !event.currentTarget.classList.contains('isSelected')) { alert('someone is booking this table, choose another one') } else { if (event.currentTarget.classList.contains('isSelected')) { this.deleteTmpReservation(this.reservationTmp.id) this.dataLoading = false } else { if (this.reservationTmp.id !== undefined) { this.deleteTmpReservation(this.reservationTmp.id) this.dataLoading = false } var self = this axios.post(self.$store.state.apiUrl + 'reservation/', { restaurant_table: id, clients_number: self.firstStepData.tableSize.value, reservation_time: self.firstStepData.reservationTime, reservation_date: self.firstStepData.reservationDate }) .then(function (response) { self.showAvailableTable() self.$store.commit('updateReservationTmp', response.data) self.dataLoading = false }) .catch(function (error) { console.log(error) }) //this.$store.commit('updateStep', 2) } }///////////////////END }, thank you in advance
This might suit you if the mutation is only called within showAvailableTable() Ref Vuex subscribe mounted() { this.$store.subscribe((mutation, state) => { if (mutation.type === 'updateRestaurantTableList') { ///////////////////START ... ///////////////////END } }) }, methods: { firstStepBook (event, id) { // call to updateRestaurantTableList triggers above subscription this.showAvailableTable() } }