[英]How to join promise to a promise chain
我有
func1<\/code>函数,它返回一个承诺。
在
func2<\/code>中,我已经启动了承诺链。
我想在这里做的是,我想在旧的承诺链中使用
func1<\/code>解析消息,并且我希望这段代码不那么复杂。
在
func2<\/code>中加入
func1<\/code>承诺以承诺链的最佳方式是什么
var func1 = function(){
return new promise(function(resolve, reject){
//some operations here
});
};
var func2 = function(){
promise.resolve(someFuncSync())
.then(function(){
//this is the old promise chain
func1()
.then(function(message,error){
return message;
//i want use this return value in old promise chain
});
console.log(message);
//printing func1 returned message in old promise chain
})
};
只需从.then()
处理程序中返回新的.then()
,它将自动添加到上一个链中,然后控制旧的Promise链的解析值。
在新返回的承诺得到解决之前,外部承诺不会得到解决,而内部承诺将控制最终的解决值。 我在return func1()
调用之前在此处添加了return
语句,以将其添加到链中:
var func2 = function(){
promise.resolve(someFuncSync())
.then(function(){
//this is the old promise chain
// ADDED return here
return func1()
.then(function(message,error){
return message;
//i want use this return value in old promise chain
});
})
};
我还要在代码中更改其他几件事,因为看起来您上面的所有内容都可以简化为:
var func2 = function () {
someFuncSync();
return func1();
};
然后,您可以执行以下操作:
func2().then(function(message) {
// process message here
}, function(err) {
// process err here
});
变更摘要:
someFuncSync()
包装到promise中。 您可以调用它,然后启动您的诺言链。 (message, error)
类的东西,因此,实际上没有理由在其中包含return message
的回调。您可以直接返回Promise。 func1()
前面添加了return
,因此我们正在返回promise。 伙计,这些答案中有些确实太过思索了。 许诺的美丽在于其简单性:
return func1().then(func2)
.then
回调可能会返回一个 Promise,它会自动添加到链中:
// createURL() returns a promise that returns a URL.
createURL(...).then(url => {
return fetch(url)
})
.then(response => {
// :-)
})
我可以通过在旧的Promise链上增加一个额外的步骤来做到这一点。
假设您不需要在新的旧承诺链中使用解析的值。
var func1 = function(){
return new promise(function(resolve, reject){
//some operations here
});
};
var func2 = function(){
promise.resolve(someFuncSync())
.then(function(arg){
return promise.all([
arg, // Argument that original promise resolved with
func1() // The new extra promise
])
})
.spread(function(arg, message){
// Now i have the new message and also the return value from the old promise.
console.log(message);
//printing func1 returned message in old promise chain
})
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.