Node.js 如何从函数nodejs获取响应
第二个函数中的console.log(lang)print未定义,它在第一个函数返回之前运行Node.js 如何从函数nodejs获取响应,node.js,express,Node.js,Express,第二个函数中的console.log(lang)print未定义,它在第一个函数返回之前运行 如何修复它?问题之一是,您的getLang函数实际上没有返回任何内容,因此默认返回值将是未定义的。尽管如此,您仍然正确地指出,getLang进行异步函数调用,因此即使您从getLang返回转换函数的值,也不允许您成功地将变量分配给它,除非您: 将getLang包装在承诺中,并使用async/await,或 只需使用translate.detect的回调函数中的translation值 你可以用。承诺允许
如何修复它?问题之一是,您的
getLang
函数实际上没有返回任何内容,因此默认返回值将是未定义的。尽管如此,您仍然正确地指出,getLang
进行异步函数调用,因此即使您从getLang
返回转换函数的值,也不允许您成功地将变量分配给它,除非您:
将getLang
包装在承诺中,并使用async/await,或
只需使用translate.detect的回调函数中的translation值
你可以用。承诺允许您使用“.then”和“.catch”等待异步任务完成。当承诺成功解析时,调用“.then”。当承诺被拒绝时,调用“.catch”
例如,您可以改为执行以下操作:
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);
})
translate.detect
是异步的。您必须console.log
在它的回调中var lang=getLang(req)
不会等待并返回语言。
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);
});
})