const getLang = function (req) {
translate.detect(req.body.phrase, function (err, res) {
if (err) throw err;
console.log(res);
return res;
});
router.post('/addPhrases', (req, res) => {
var lang = getLang(req);
console.log(lang);
})
console.log(lang)从第二个函数打印undefined,它在第一个函数返回之前运行
我该如何解决?
答案 0 :(得分:1)
您可以使用Promises。 Promise允许您等待异步任务完成,使用" .then"和" .catch"。 "。然后"在Promise成功解析时调用。 " .catch"当Promise被拒绝时被调用。
对于您的示例,您可以改为:
const getLang = function (req) {
return new Promise((resolve, reject) => {
translate.detect(req.body.phrase, (err, res) => {
if (err){
reject(err);
} else {
console.log(res);
resolve(res);
}
});
});
}
router.post('/addPhrases', (req, res) => {
var lang = getLang(req).then((lang) => {
console.log(lang);
}).catch((error) => {
// handle error here
throw new Error(error);
});
})
答案 1 :(得分:0)
其中一个问题是,getLang
函数实际上没有返回任何内容,因此默认返回值为undefined
。即使如此,你还是正确地指出getLang
进行异步函数调用,所以即使你从getLang
返回翻译函数的值,这也不允许你成功地将变量赋给它,除非你:
getLang
并使用async / await或translate.detect