node.js - 如何从函数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) 来自第二个函数打印未定义,它在第一个函数返回之前运行
我该如何解决?
解决方案
你可以使用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);
});
})
推荐阅读
- sql - 从逗号分隔列表中的联接表中获取多个列值
- java - 如何轻松地从 SWT Combo 下拉列表中获取数据引用
- rust - Why Rust allows declaring same variable name twice in a scope?
- php - 如何使用标准输出中的键/值作为 mySQL 数据库更新的输入数据?
- elasticsearch - 在弹性搜索中创建别名时出现安全特权异常
- r - ggplot2中的分组堆积条形图,其中每个堆栈对应于其y轴值
- angular - 如何查看 Angular 项目的实时更改?
- python - 在正文中传播函数参数
- flutter - Flutter:导航到另一个屏幕时变量重置为默认值
- javascript - webpack 未知单词 > 1 | 从“反应”导入反应