因为你在那里做了一些异步的事情,但是你同步地发送值。基本上,此代码将按以下顺序运行:
-
运行
let translate='';
-
运行
['hello','love'].forEach(...)
-
运行
await NaijaLang.find(...)
异步for word=hello
-
运行
等待Naijalang。找到(…)
不同步地为word=love
-
运行
console.log(translate)
和
res.send(translate);
-
解决的价值
等待Naijalang。找到(…)
->此时
translate
是第一次更新(word=hello或word=love)。无论提前完成什么)
-
解析第二个调用的值
等待Naijalang。找到(…)
->此时
翻译
是第二次更新。但是第五步已经发送了值。
你可以在这里找到更详细的解释:
https://blog.lavrton.com/javascript-loops-how-to-handle-async-await-6252dd3c795
你也可以在那里找到如何修复它。您可以使用for循环而不是foreach:
app.get('/translate',function(req,res){
let translate='';
for (let word of ['hello','love']) {
let trans=await NaijaLang.find({"engword":word,"naijalang":"yoruba"});
translate+=" " + trans[0].translation;
//Returns values
console.log(translate)
}
//Returns Empty String;
console.log(translate)
res.send(translate);
});
这一次,代码将按您可能需要的方式执行。首先,
find
方法将调用word=hello,然后,在执行完成后,
找到
方法将调用word=love,最后在两个调用完成后,
res.send
将被调用。