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

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() 个调用序列作为函数参数。