首页 > 解决方案 > 如何从函数nodejs获得响应

问题描述

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) 来自第二个函数打印未定义,它在第一个函数返回之前运行

我该如何解决?

标签: node.jsexpress

解决方案


你可以使用Promises。Promise 允许您使用“.then”和“.catch”等待异步任务完成。当 Promise 成功解决时,“.then”被调用。当 Promise 被拒绝时调用“.catch”。

对于您的示例,您可以改为:

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);
    });
})

推荐阅读