JS ES6承诺无缘无故地打电话



我对承诺和NPM" streamTopromise"软件包有问题。首先 - 我有不同的功能,当解决所有这些功能时,我想调用最后一个功能。但是,在我的代码中 - 它只是被执行,甚至没有通过" streamTopromise"中的IFF

var func1 = new Promise(function(resolve,reject){ 
// get's executed without reason
  // do something
  if(var1 && var2){
    resolve(true);
  }
});
var func2 = new Promise(function(resolve,reject){
  // get's executed without reason
  // do more
  if(var3 && var4){
    resolve(true);
  }
});
streamToPromise(stream).then(function (operation) {
  // do more 
 // doesn't get executed
  if(varX && varY){
    func1()
    .then(func2)
    .then(func3)
    .then(funcFinal)
    .catch(function (error) {
      // console log error
    }
  }
}

我一直在尝试了解承诺已有几个星期了,但是总会有一些我不明白的错误。真的很感谢您的帮助!

您已经创建了 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
                }
            }
    }
});

func1func2实际上并不功能;他们承诺您立即创建。

您可能希望这些是返回承诺的功能。

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

原因是方法被称为

的方式

要么使用这种方式

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

在func2()和func3()中,您需要返回承诺对象

或使用(不带有伪造)

.then(func2).then(func3)

相关内容

  • 没有找到相关文章

最新更新