如何返回带有返回then()的参数的Promise?

时间:2015-10-21 02:29:39

标签: node.js asynchronous promise

有点复杂。让我们看一下代码:

requestAccessToken().then(function(requestResult) { // this is the first then()
    if(requestResult.ok == 1) {
        return document;
    }
}).then(function(document) { // this is the second then()
    return db.update(updateArgu); // here, db.update will return a promise obj
}).then(function(result) { // this is the last then()
    console.log('update ok');
    console.log(result);
});

由于db.update(updateArgu)将返回一个promise对象,因此可以添加.then()方法,例如db.update().then()

但我想保留主链requestAccessToken().then().then(),所以我在第二个db.update()中返回了then()。输出是:

app-0 update ok
app-0 undefined

db.update代码为:

exports.update = function(arguments) {
    var name = arguments.name;
    var selector = (arguments.selector) ? arguments.selector : {};
    var document = (arguments.document) ? arguments.document : {};
    var options = (arguments.options) ? arguments.options : {};
    return Promise(resolve, reject) {
        MongoClient.connect(DBURL, function(err, db) {
            if(err) throw err;
            db.collection(name).update(selector, document, options, function(err, result) {
                db.close();
                if(err) {
                    reject(err);
                } else {
                    resolve(result);
                }
            });
        });
    }
}

您可以看到它有resolve(result),如何将其转移到上一个then()

1 个答案:

答案 0 :(得分:0)

我会对答案做出评论。

你在哪里:

return Promise(resolve, reject) {
   ...
}

它应该是:

return new Promise(function(resolve, reject) {
    ...
});