Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何存储要在函数中多次使用的异步函数的值,而不必多次进行异步调用?_Javascript_Node.js_Reactjs_Async Await_Promise - Fatal编程技术网

Javascript 如何存储要在函数中多次使用的异步函数的值,而不必多次进行异步调用?

Javascript 如何存储要在函数中多次使用的异步函数的值,而不必多次进行异步调用?,javascript,node.js,reactjs,async-await,promise,Javascript,Node.js,Reactjs,Async Await,Promise,我有一个异步函数,可以调用API,如下所示: const getModel = async () => { const model = await fetch model... return model; }; 我还有另一个函数,它使用tfjs模型来分析文本的情感: export const analyzeSentiment = async (text) => { const model = await getModel(); const score = await

我有一个异步函数,可以调用API,如下所示:

const getModel = async () => {
  const model = await fetch model...
  return model;
};
我还有另一个函数,它使用tfjs模型来分析文本的情感:

export const analyzeSentiment = async (text) => {
  const model = await getModel();
  const score = await predict(text, model);
  return score;
};
我的问题是,我正在将多组文本映射到
analyzetouction
函数,该函数需要
getModel
对每组文本进行提取调用。有没有办法设置
getModel()的返回

对于一个将持续存在的变量,允许每次调用
analyzetouction
时只调用一次并使用它?我还尝试在
analyzetouction
之外声明模型,并在函数中等待它,但是这也不起作用。如果有必要,我使用的是React/Node。

您可以创建一个本地缓存变量,该变量会记住第一次请求时的值,然后从那时起使用该值:

let cachedModel;

export const analyzeSentiment = async (text) => {
  if (!cachedModel) {
       cachedModel = getModel();
  }
  return predict(text, await cachedModel);
};
在这个实现中,
cachedModel
将包含一个从第一次调用
analyzetouction()
开始的承诺。如果按顺序多次调用
analyzetouction()。无论承诺是悬而未决还是已经兑现,这一切都是有效的



或者,如果您只想对一系列
analyzetouction()
作为函数参数调用。

任何
异步的函数
都会返回一个承诺。。。因此,需要等待或使用
。。。由于getModel基本上返回一个承诺,它是其中唯一(也是最后一个)等待函数的结果。。。它的函数与
const getModel=()=>fetch model…
相同-在这里您看到,您返回的是一个promise问题是您的
分析情绪()
getModel()耦合得太紧密了。如果需要在对
analyzetouction()
的多个调用之间共享,请将
model
作为
analyzetouction()
的参数。这基本上意味着当您映射多组文本时,您最好直接使用
predict()
。“我还尝试在AnalyzeMothemation之外声明模型,并在函数内部等待它”-这应该可以很好地工作(但您可能希望将变量重命名为
modelPromise
)。你能给我们看一下那次尝试的代码吗?很抱歉反应太晚,但我最终还是使用了接受答案的方法。我尝试的是声明'model=getModel()'并执行'analyzetouction=async(wait model,text)=>…',但是由于我将数组映射到'analyzetouction','getModel'仍然在每次需要作为参数时被调用。