Javascript JS ES6承诺被无缘无故地调用
我对承诺和npm streamToPromise软件包有问题。 首先,我有不同的函数,当所有这些函数都被解析后,我想调用最后一个函数。然而,在我的代码中,它只是在没有经过streamToPromise中的IFF的情况下执行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
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,它们被初始化了吗?