【发布时间】:2021-08-18 09:11:48
【问题描述】:
我有一个异步函数,可以像这样进行 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()的返回
到一个将持续存在的变量,允许它只被调用一次并在每次调用analyzeSentiment 时使用?我也尝试在函数内部声明analyzeSentiment 和await 之外的模型,但这也不起作用。如果重要的话,我正在使用 React/Node。
【问题讨论】:
-
async的任何函数都返回一个 Promise ...因此需要awaited 或使用.then... -
顺便说一句......因为 getModel 基本上返回一个 Promise ,它是其中唯一(也是最后一个)等待函数的结果......它的功能与
const getModel = () => fetch model...相同 - 你看到了, 你正在返回一个 Promise -
问题是您的
analyzeSentiment()与getModel()耦合太紧。如果您需要在多次调用analyzeSentiment()之间共享model的参数,则将其设置为analyzeSentiment()。这基本上意味着当您映射多组文本时,您还不如直接使用predict()。 -
"我也尝试过在 analyzeSentiment 之外声明模型并在函数中等待它" - 这应该可以完美运行(但您可能希望将变量重命名为
modelPromise)。请给我们看一下那次尝试的代码吗? -
抱歉回复晚了,但我最终使用了接受的答案的方法。我尝试的是声明'model = getModel()'并执行'analyzeSentiment = async(等待模型,文本)=> ...',但是由于我将数组映射到'analyzeSentiment','getModel'仍然被称为每个每次都需要作为参数的时间。
标签: javascript node.js reactjs async-await promise