【问题标题】:How to return a Promise with argument which returned to then()?如何返回带有返回 then() 的参数的 Promise?
【发布时间】:2015-10-21 11:02:00
【问题描述】:

这有点复杂。让我们显示代码:

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对象,它可以像db.update().then()一样添加一个.then()方法。

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

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()

【问题讨论】:

  • 转移到最后一个then回调,否则根本不会被调用。只是resultundefined。不是吗?您期望 Collection update 方法返回什么?
  • 在你的 MongoClient 回调中加入一个 console.log 看看结果如何。你也想返回一个“新的承诺”
  • @Bergi 是的,最后一个 then() 被调用,但没有 result
  • return Promise() 应该是 return new Promise()
  • @BrickYang:我的意思是result 已经在db.update 回调中未定义。你在那里检查过吗?这似乎不是一个承诺问题。

标签: node.js asynchronous promise


【解决方案1】:

我会把我的评论变成答案。

你在哪里做:

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

应该是:

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

【讨论】:

    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多