确保内部延迟完成,然后“然后”
Ensure inner deferred completes before outer "then"
如果我有 2 个嵌套的延迟对象,并且我正在等待两个对象完成,我如何确保它们的then
在外部then
触发之前完成?
$.when($.ajax({
method: 'PUT',
url: someURL,
data: {
// My data
},
callback: function(r) {
var deferred1 = $.Deferred();
var deferred2 = $.Deferred();
$.ajax({
method: 'PUT',
url: url1,
data: {
// My data
}
}).complete(deferred1.resolve);
$.ajax({
method: 'PUT',
url: url2,
data: {
// My data
}
}).complete(deferred2.resolve);
$.when(deferred1, deferred2).then(function() {
self.parent.container.dialog('close').remove();
self.parent.configurator.container.dialog('close').remove();
});
},
})).then(function() {
// Some work; e.g. close a loading spinner
});
使用上述代码,当deferred1
和deferred2
被解析时,在内部then
之前调用外部then
承诺并不神奇,它们不能只知道"工作完成"的时间,他们检查完成的唯一方法是通过返回值。如果你想连锁承诺,你必须从你当时的链条中回来。
在此示例中,您不会从 then 调用返回,因此它不会等待。
此外 - 你不需要用$.when
包装常规承诺,$.when
所做的是将一个或多个可能的承诺转换为对其价值观的承诺。
$.ajax({
method: 'PUT',
url: someURL,
data: {
// My data
},
}).then(function(result){
var p1 = $.ajax({ // $.ajax already returns a promise
method: 'PUT',
url: url1,
data: {
// My data
}
})
var p2 = $.ajax({
method: 'PUT',
url: url2,
data: {
// My data
}
});
return $.when(p1, p2);
}).then(function() {
self.parent.container.dialog('close').remove();
self.parent.configurator.container.dialog('close').remove();
}).then(function() {
// some action
});
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- Javascript运行php文件,然后下载文件
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 弹出窗口出现,然后退出
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 将值输入到对象,然后该对象推送到数组
- 调用函数内部的函数
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 从 iframe 内部关闭引导模式,然后转到父页面的特定部分
- 将 JQuery 函数移动到函数内部,然后从多个函数访问它
- 在嵌套数组内部和从嵌套数组推送和读取,然后 ng 重复它们
- 确保内部延迟完成,然后“然后”
- 函数内部的javascript for循环,然后将其输出到页面
- 循环浏览表格's td's并检查内部跨度上的内容,然后更改文本的颜色
- Angular2-NgFor内部树模型:删除然后添加元素时顺序错误
- 外部变量不能在Promise内部改变.然后函数
- 当在对象内部创建对象,然后添加到嵌套对象时,控制台只返回"object"而不是附加的价值
- 按多个条件排序 - 首先按另一个数组排序,然后按内部的另一个属性排序
- 在内部更新$scope.然后