Javascript 如何存储要在函数中多次使用的异步函数的值,而不必多次进行异步调用?
我有一个异步函数,可以调用API,如下所示: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
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'仍然在每次需要作为参数时被调用。