【问题标题】:Why is then block after Promise with 'if' not been executed?为什么在没有执行'if'的Promise之后阻塞?
【发布时间】:2018-01-13 18:55:53
【问题描述】:

我对异步编程相当陌生,并试图理解为什么执行永远不会进入包含“if”的承诺之后链接的“then”块。有人可以帮忙吗?

var uploadResourceToView = function (edit) {
    var promises = [];

    for (var i = 0; i < inputConfig.length; i++) {
        promises.push(new Promise(function (resolve, reject) {
            var name = 'hey';

            new Promise(function (resolve) {
                if (i == 0) {
                    return new pTree().renamePage('Home', name);
                } else {
                    return edit.addPage(name, '3D')
                }
            })
            // subsequent then()s are never executed 
            .then(function () {
                console.log('why am I not been executed ? ');
                return edit.addObject(object)
            })
            .then(function () {
                return edit.addResource('test resource', true);
            })
            .then(resolve, reject);
        });
    }

    return Promise.all(promises);
}

【问题讨论】:

    标签: javascript node.js asynchronous promise


    【解决方案1】:

    因为你从不打电话给resolvereject 来表达你内心的承诺。您传递给Promise 构造函数的执行器函数的返回值被完全忽略。要解决承诺,请调用 new Promise 传递给执行程序的 resolvereject 回调。


    就实际使整个功能正常工作而言,我猜renamePageaddPage 会返回承诺。如果是这样,请直接使用它们,无需在该函数中的任何位置使用new Promise

    var uploadResourceToView = function (edit) {
        var promises = [];
    
        for (var i = 0; i < inputConfig.length; i++) {
            var name = 'hey';
            var inner = i == 0 ? new pTree().renamePage('Home', name) : edit.addPage(name, '3D');
            promises.push(inner
                .then(function () {
                    console.log('why am I not been executed ? ');
                    return edit.addObject(object)
                })
                .then(function () {
                    return edit.addResource('test resource', true);
                })
            });
        }
    
        return Promise.all(promises);
    }
    

    更多:What is the explicit promise construction antipattern and how do I avoid it?

    【讨论】:

      猜你喜欢
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2017-07-30
      • 2011-04-10
      • 2017-07-31
      • 2019-04-02
      相关资源
      最近更新 更多