如何从函数nodejs获得响应

时间:2018-06-18 03:29:58

标签: node.js express

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,它在第一个函数返回之前运行

我该如何解决?

2 个答案:

答案 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返回翻译函数的值,这也不允许你成功地将变量赋给它,除非你:

  1. 在promise中包装getLang并使用async / await或
  2. 只需使用translate.detect
  3. 的回调函数中的翻译值