jQuery promise with dependent promise 和 overall completion
jQuery promise with dependent promise and overall completion
假设我有 2 个 promise promise1, promise2
可以异步执行某些操作。
promise2 取决于 promise1 在 运行 本身之前完成。这很简单。
function runPromises(){
return promise1().done(function(){
promise2();
});
}
问题是我也想知道他们什么时候完成。
runPromises().done(function(){
alert("promise 1 and 2 done");
});
当前 runPromises 在 promise1 未同时完成时发出警报。
通常,在发布问题之前,我尝试了 30 分钟试图为此找到解决方案,但现在我找到了答案。
我可以通过新建 $.Deferred();
function runPromises(){
var d1 = new $.Deferred();
promise1().done(function(){
promise2().done(function(){
d1.resolve();
};
});
return d1.promise();
}
runPromises().done(function(){
alert("promise 1 and 2 done");
});
这里是一个使用两个简单函数的示例,分别称为 process1 和 process2。这些函数关闭并异步执行某些操作(在本例中我只是使用 setTimeout 来模拟)和 return 承诺(为此使用 q 库)。进程 1 运行,然后进程 2 运行,当进程 2 returns 时有空间做某事。希望这会有所帮助:
var process1 = function() {
var deferred = q.defer();
setTimeout(function() {
deferred.resolve();
}, 10);
return deferred.promise;
};
var process2 = function() {
var deferred = q.defer();
setTimeout(function() {
deferred.resolve();
}, 10);
return deferred.promise;
};
process1()
.then(process2)
.then(function() {
// Process 1 and 2 have completed
});
使用 then
链接承诺:
promise1().then(promise2).then(promise3).done(function(){
alert("promise 1 and 2 and 3 done");
});
已编辑:
function runPromises(){
return promise1().then(promise2).then(promise3);
}
runPromises().done(function(){console.log('all done!')});
要链接 promise 操作,并获得对第二个结果的 promise(即当两者都完成时),请使用 then
方法而不是 done
:
function runPromises(){
return promise1().then(function(){
// ^^^^
return promise2();
// ^^^^^^ always return promise from async functions like this callback
});
}
如果您不关心参数,您甚至可以将其缩短为 return promise1().then(promise2);
。
假设我有 2 个 promise promise1, promise2
可以异步执行某些操作。
promise2 取决于 promise1 在 运行 本身之前完成。这很简单。
function runPromises(){
return promise1().done(function(){
promise2();
});
}
问题是我也想知道他们什么时候完成。
runPromises().done(function(){
alert("promise 1 and 2 done");
});
当前 runPromises 在 promise1 未同时完成时发出警报。
通常,在发布问题之前,我尝试了 30 分钟试图为此找到解决方案,但现在我找到了答案。
我可以通过新建 $.Deferred();
function runPromises(){
var d1 = new $.Deferred();
promise1().done(function(){
promise2().done(function(){
d1.resolve();
};
});
return d1.promise();
}
runPromises().done(function(){
alert("promise 1 and 2 done");
});
这里是一个使用两个简单函数的示例,分别称为 process1 和 process2。这些函数关闭并异步执行某些操作(在本例中我只是使用 setTimeout 来模拟)和 return 承诺(为此使用 q 库)。进程 1 运行,然后进程 2 运行,当进程 2 returns 时有空间做某事。希望这会有所帮助:
var process1 = function() {
var deferred = q.defer();
setTimeout(function() {
deferred.resolve();
}, 10);
return deferred.promise;
};
var process2 = function() {
var deferred = q.defer();
setTimeout(function() {
deferred.resolve();
}, 10);
return deferred.promise;
};
process1()
.then(process2)
.then(function() {
// Process 1 and 2 have completed
});
使用 then
链接承诺:
promise1().then(promise2).then(promise3).done(function(){
alert("promise 1 and 2 and 3 done");
});
已编辑:
function runPromises(){
return promise1().then(promise2).then(promise3);
}
runPromises().done(function(){console.log('all done!')});
要链接 promise 操作,并获得对第二个结果的 promise(即当两者都完成时),请使用 then
方法而不是 done
:
function runPromises(){
return promise1().then(function(){
// ^^^^
return promise2();
// ^^^^^^ always return promise from async functions like this callback
});
}
如果您不关心参数,您甚至可以将其缩短为 return promise1().then(promise2);
。