在 Javascript 中合并 $.when 和 async/await
Combine $.when and async/await in Javascript
在我的旧代码中,我使用了 jQuery 的 $.when().then() 模式。在 when 内,两个 web 调用 运行 并行。在其中的第一个中,我现在需要事先访问一些额外的数据。我基本上试图通过使完成的处理程序异步并等待该网络调用来实现这一点。这是一个简化的例子:
$.when(
firstCall().done(async function(outerData) {
let innerData = await anotherWebCall();
doSomeOtherStuff(outerData, innerData);
console.log('first call finished');
}),
secondCall().done(() => doSomethingElse())
).then(function() {
console.log('everything finished');
});
我预计,我会首先在控制台中看到 "first call finished",然后是 "everything finished"。然而,情况恰恰相反。我该如何解决?
我找到了以下解决方法。我仍然认为这不是最佳解决方案。
const firstCallFinished = $.Deferred();
$.when(
firstCallFinished,
firstCall().done(async function(outerData) {
let innerData = await anotherWebCall();
doSomeOtherStuff(outerData, innerData);
console.log('first call finished');
firstCallFinished.resolve();
}),
secondCall().done(() => doSomethingElse())
).then(function() {
console.log('everything finished');
});
在我的旧代码中,我使用了 jQuery 的 $.when().then() 模式。在 when 内,两个 web 调用 运行 并行。在其中的第一个中,我现在需要事先访问一些额外的数据。我基本上试图通过使完成的处理程序异步并等待该网络调用来实现这一点。这是一个简化的例子:
$.when(
firstCall().done(async function(outerData) {
let innerData = await anotherWebCall();
doSomeOtherStuff(outerData, innerData);
console.log('first call finished');
}),
secondCall().done(() => doSomethingElse())
).then(function() {
console.log('everything finished');
});
我预计,我会首先在控制台中看到 "first call finished",然后是 "everything finished"。然而,情况恰恰相反。我该如何解决?
我找到了以下解决方法。我仍然认为这不是最佳解决方案。
const firstCallFinished = $.Deferred();
$.when(
firstCallFinished,
firstCall().done(async function(outerData) {
let innerData = await anotherWebCall();
doSomeOtherStuff(outerData, innerData);
console.log('first call finished');
firstCallFinished.resolve();
}),
secondCall().done(() => doSomethingElse())
).then(function() {
console.log('everything finished');
});