根据Promise是否已解决,从函数返回值

时间:2016-05-16 17:18:53

标签: javascript node.js asynchronous promise

const dbConnection = require("../dbConnection");    

var task = function () {
    var response = "";
    dbConnection.then(function () {
        //do something here
        response = "some value";            
    })
    .catch(function () {
       response = new Error("could not connect to DB");
    });

    //I can't return response here because the promise is not yet resolved/rejected.
}

我正在使用别人写的节点模块。它返回一个承诺。我想返回一个字符串或new Error(),具体取决于模块返回的Promise对象是否已解析。我怎么能这样做?

我无法在finally()回调中返回,因为return将应用于回调函数而不是我的task函数。

2 个答案:

答案 0 :(得分:0)

dbConnection.then().catch()本身会返回一个承诺。考虑到这一点,我们可以简单地将代码编写为return dbConnection.then(),并让使用该函数的代码将返回值视为promise。例如,

var task = function () {
  return dbConnection.then(function() {
    return "Good thing!"
  }).catch(function() {
    return new Error("Bad thing.")
  })
}

task().then(function(result){
  // Operate on the result
}

答案 1 :(得分:0)

tab_valutazioni

这将返回一个你可以链接的承诺。

使用promises的意义类似于使用回调。你不希望CPU坐在那里等待响应。