我正在构建一个节点模块,它应该在节点承诺处理后返回一个值。
// module
module.exports.get_data = function(input){
var promise = fn1();
promise
.then((res) => {
// process res
return res; // return processed value from get_data function
})
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能完成这件事?
小智 1
如果我们看不到 fn1 是什么或做什么,就很难判断发生了什么。但是 get_data 需要返回一个承诺,而不是那里的值。事实上,该 return 语句不是 get_data 的 return 语句,而是未命名的 ES6 Arrow Function 的 return 语句,它将 res 返回到 Promise 只是为了传递给下一个 .then() 函数。它根本不会传递给 get_data 。
通过立即返回一个新的 Promise,get_data 会等待直到 Promise 完成。无论调用 get_data 都可以调用 .then() 来使用该值。像这样:
module.exports.get_data = function(input){
return new Promise((resolve,reject)=>{
var promise = fn1();
promise
.then((res) => {
// process res
resolve(res)
})
})
}
Run Code Online (Sandbox Code Playgroud)
但这一切似乎都是多余的。虽然我没有在节点中使用过await,但它应该与其他语言一样工作。这意味着您应该能够执行以下操作
module.exports.get_data = async function(input){
var res = await fn1();
return res
}
Run Code Online (Sandbox Code Playgroud)
假设 fn1 是一个承诺......
| 归档时间: |
|
| 查看次数: |
5755 次 |
| 最近记录: |