如何存储要在函数中多次使用的异步函数的值,而不必多次进行异步调用?
How can I store the value of an async function to be used multiple times in a function without having to make the async call multiple times?
我有一个异步函数,可以这样调用 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;
};
我的问题是我将多组文本映射到 analyzeSentiment
函数,这需要 getModel
对每组文本进行提取调用。有什么方法可以设置 getModel()
的 return
到一个将持续存在的变量,允许它只被调用一次并在每次调用 analyzeSentiment
时使用?我也尝试过在 analyzeSentiment
之外声明模型并在函数内部 await
声明它,但是这也不起作用。如果重要的话,我正在使用 React/Node.
您可以创建一个本地缓存变量,它会记住第一次请求时的值,然后从那时起使用该值:
let cachedModel;
export const analyzeSentiment = async (text) => {
if (!cachedModel) {
cachedModel = getModel();
}
return predict(text, await cachedModel);
};
在此实现中,cachedModel
将包含第一次调用 analyzeSentiment()
时的承诺。如果 analyzeSentiment()
按顺序被多次调用,代码仍然只会调用 getModel()
一次——所有连续的调用都只会等待相同的承诺。无论 promise 是悬而未决还是已经实现,这一切都有效。
或者,如果您只想对一系列 analyzeSentiment()
调用使用相同的模型,但仅针对特定系列的调用,则在调用者中获取一次模型并将相同的模型传递给analyzeSentiment()
个调用序列作为函数参数。
我有一个异步函数,可以这样调用 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;
};
我的问题是我将多组文本映射到 analyzeSentiment
函数,这需要 getModel
对每组文本进行提取调用。有什么方法可以设置 getModel()
的 return
到一个将持续存在的变量,允许它只被调用一次并在每次调用 analyzeSentiment
时使用?我也尝试过在 analyzeSentiment
之外声明模型并在函数内部 await
声明它,但是这也不起作用。如果重要的话,我正在使用 React/Node.
您可以创建一个本地缓存变量,它会记住第一次请求时的值,然后从那时起使用该值:
let cachedModel;
export const analyzeSentiment = async (text) => {
if (!cachedModel) {
cachedModel = getModel();
}
return predict(text, await cachedModel);
};
在此实现中,cachedModel
将包含第一次调用 analyzeSentiment()
时的承诺。如果 analyzeSentiment()
按顺序被多次调用,代码仍然只会调用 getModel()
一次——所有连续的调用都只会等待相同的承诺。无论 promise 是悬而未决还是已经实现,这一切都有效。
或者,如果您只想对一系列 analyzeSentiment()
调用使用相同的模型,但仅针对特定系列的调用,则在调用者中获取一次模型并将相同的模型传递给analyzeSentiment()
个调用序列作为函数参数。