JS ES6 Promise被无缘无故地召唤

时间:2017-09-06 17:28:45

标签: javascript node.js stream promise es6-promise

我有承诺和npm" streamToPromise"包。 首先 - 我有不同的功能,当所有这些功能都解决后,我想调用最后一个函数。但是在我的代码中 - 它只是在没有通过" streamToPromise"

内的iffs的情况下执行
{{1}}

我一直试图了解Promise几周,但总有一些错误我不明白。真的很感激一些帮助!

3 个答案:

答案 0 :(得分:2)

func1func2实际上并不起作用;他们承诺你立即创造。

你可能希望那些是返回承诺的函数。

您也不想打电话给他们并将结果传递给then();你想自己传递这些功能。

答案 1 :(得分:2)

您已创建func1 func2等,但它们不是功能,它们是已经创建的承诺"因此,new Promise执行程序中的代码立即被调用

你希望func1等是函数,然后使它们成为函数

var func1 = function() {
    return new Promise(function(resolve, reject) {
        // get's executed without reason
        // do something
        if (var1 && var2) {
            resolve(true);
        }
    });
}

var func2 = function() {
    return new Promise(function(resolve, reject) {
        // get's executed without reason
        // do more
        if (var3 && var4) {
            resolve(true);
        }
    });
}

streamToPromise(stream).then(function(operation) {
    if (varX && varY) {
        func1()
            .then(func2)
            .then(func3)
            .then(funcFinal)
            .catch(function(error) {
                    // console log error
                }
            }
    }
});

答案 2 :(得分:0)

原因是方法被称为

使用这种方式

.then(function () {
return func2();
}).then( ...) 

为了在func2()和func3()中你需要返回Promise对象

或使用(没有paranthesis)

.then(func2).then(func3)