Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS ES6承诺被无缘无故地调用_Javascript_Node.js_Stream_Promise_Es6 Promise - Fatal编程技术网

Javascript JS ES6承诺被无缘无故地调用

Javascript JS ES6承诺被无缘无故地调用,javascript,node.js,stream,promise,es6-promise,Javascript,Node.js,Stream,Promise,Es6 Promise,我对承诺和npm streamToPromise软件包有问题。 首先,我有不同的函数,当所有这些函数都被解析后,我想调用最后一个函数。然而,在我的代码中,它只是在没有经过streamToPromise中的IFF的情况下执行 var func1 = new Promise(function(resolve,reject){ // get's executed without reason // do something if(var1 && var2){ reso

我对承诺和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实际上不是函数;它们是你立即做出的承诺

您可能希望这些函数能够返回承诺

你也不想给他们打电话,然后把结果传给他们;您希望传递函数本身。

func1和func2实际上不是函数;它们是你立即做出的承诺

您可能希望这些函数能够返回承诺


你也不想给他们打电话,然后把结果传给他们;您希望传递函数本身。

原因是调用方法的方式

要么用这种方法

.then(function () {
return func2();
}).then( ...) 
对于func2和func3,需要返回Promise对象

或使用无偏执

.then(func2).then(func3)

原因是调用方法的方式

要么用这种方法

.then(function () {
return func2();
}).then( ...) 
对于func2和func3,需要返回Promise对象

或使用无偏执

.then(func2).then(func3)
您已经创建了func1 func2等,但它们不是函数,它们是立即创建的承诺,因此新承诺执行器中的代码被立即调用

您希望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
                }
            }
    }
});
您已经创建了func1 func2等,但它们不是函数,它们是立即创建的承诺,因此新承诺执行器中的代码被立即调用

您希望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
                }
            }
    }
});

我试过了,但问题是它甚至没有达到这一点。函数在之前被调用过。这是因为我将Promise函数创建为vars,它们被初始化了吗?@TimoReichert:你尝试了什么?您有两个不同的错误,每个错误都会导致此问题。我将函数更改为函数名。所以我不能提前做出承诺?还有别的选择吗?我是否应该在它们之上创建函数和承诺?抱歉,这听起来很愚蠢,但我真的很难理解承诺到底是如何起作用的。@TimoReichert:承诺只是一个目标。您传递给new Promise的回调将立即运行。如果你想要一个返回承诺的函数,而不是立即创建承诺,你需要创建一个函数。我试过了,但问题是它甚至没有达到这一点。函数在之前被调用过。这是因为我将Promise函数创建为vars,它们被初始化了吗?@TimoReichert:你尝试了什么?您有两个不同的错误,每个错误都会导致此问题。我将函数更改为函数名。所以我不能提前做出承诺?还有别的选择吗?我是否应该在它们之上创建函数和承诺?抱歉,这听起来很愚蠢,但我真的很难理解承诺到底是如何起作用的。@TimoReichert:承诺只是一个目标。您传递给new Promise的回调将立即运行。如果你想要一个返回承诺的函数,而不是立即创建承诺,你需要创建一个函数。我试过了,但问题是它甚至没有达到这一点。函数在之前被调用过。这是因为我将Promise函数创建为vars,它们被初始化了吗?我试过了,但问题是它甚至没有达到这一点。函数在之前被调用过。这是因为我将Promise函数创建为vars,它们被初始化了吗?