请我尝试将字符串结果连接到快速路由器中的变量,但它 returns 是一个空字符串
Please I am trying to concatenate string result to a variable in an express router but it returns an empty string
我正在尝试遍历数组获取值并搜索数据库,然后将数据库结果连接到字符串翻译
app.get('/translate',function(req,res) {
let translate = '';
['hello','love'].forEach(async (word) => {
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);
});
因为你在那里做了一些异步的事情,但是你同步发送了值。基本上,此代码将按以下顺序 运行:
- 运行
let translate='';
- 运行
['hello','love'].forEach(...)
- 运行
await NaijaLang.find(...)
异步 for word=hello
- 运行
await NaijaLang.find(...)
异步 for word=love
- 运行
console.log(translate)
和 res.send(translate);
- 解析
await NaijaLang.find(...)
的值 -> 这是 translate
第一次更新的时间(word=hello 或 word=love。无论何时完成)
- 解析第二次调用的值
await NaijaLang.find(...)
-> 这是translate
第二次更新的时间。但该值已在第 5 步发送。
您可以在这里找到更详细的解释:https://blog.lavrton.com/javascript-loops-how-to-handle-async-await-6252dd3c795
您还可以在那里找到修复方法。您可以使用 for-of 循环代替 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);
});
这一次,代码将按照您的意愿执行。首先,word=hello 会调用 find
方法,然后,执行完成后,word=love 会调用 find
方法,最后两个调用都完成后,res.send
将被调用。
我正在尝试遍历数组获取值并搜索数据库,然后将数据库结果连接到字符串翻译
app.get('/translate',function(req,res) {
let translate = '';
['hello','love'].forEach(async (word) => {
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);
});
因为你在那里做了一些异步的事情,但是你同步发送了值。基本上,此代码将按以下顺序 运行:
- 运行
let translate='';
- 运行
['hello','love'].forEach(...)
- 运行
await NaijaLang.find(...)
异步 for word=hello - 运行
await NaijaLang.find(...)
异步 for word=love - 运行
console.log(translate)
和res.send(translate);
- 解析
await NaijaLang.find(...)
的值 -> 这是translate
第一次更新的时间(word=hello 或 word=love。无论何时完成) - 解析第二次调用的值
await NaijaLang.find(...)
-> 这是translate
第二次更新的时间。但该值已在第 5 步发送。
您可以在这里找到更详细的解释:https://blog.lavrton.com/javascript-loops-how-to-handle-async-await-6252dd3c795
您还可以在那里找到修复方法。您可以使用 for-of 循环代替 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);
});
这一次,代码将按照您的意愿执行。首先,word=hello 会调用 find
方法,然后,执行完成后,word=love 会调用 find
方法,最后两个调用都完成后,res.send
将被调用。