我对承诺和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
}
}
}
});
func1
和 func2
实际上并不功能;他们承诺您立即创建。
您可能希望这些是返回承诺的功能。
您也不想打电话给他们,并将其结果传递给then()
;您想自己传递功能。
原因是方法被称为
的方式要么使用这种方式
.then(function () {
return func2();
}).then( ...)
在func2()和func3()中,您需要返回承诺对象
或使用(不带有伪造)
.then(func2).then(func3)