Nodejs 承诺从那时起返回值

ima*_*der 5 node.js promise

我正在构建一个节点模块,它应该在节点承诺处理后返回一个值。

// 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 是一个承诺......