javascript - 使用 jQuery 并行执行多个 promise 后等待完成

标签 javascript jquery asynchronous callback deferred

我想使用 jquery 的延迟/ promise 实现对多个异步 ajax 请求进行排队:

function doSomething() {
    console.log('doSomething')};

function makeMultiAjaxRequests1() {
    console.log('makeMultiAjaxRequests1')};

function makeMultiAjaxRequests2() {
    console.log('makeMultiAjaxRequests2')};

var step1 = function () { 
    var promise = new $.Deferred().promise();   
    makeMultiAjaxRequests1(); 
    return promise; }

var step2 = function () {
    var promise = new $.Deferred().promise();
    makeMultiAjaxRequests2();
    return promise; } 

step1()
   .then(step2())
   .done(doSomething());

$.when(step1(), 
       step2())
   .done(function () {
    doSomething();
});

这是 fiddle link .所以我的问题是:

在 step1 和 step2 并行执行的模式中,代码没有到达最后一个处理函数。为什么?

最佳答案

你需要解析step1和step2中的deferred对象

试试这个

function doSomething() {
    console.log('doSomething')};

function makeMultiAjaxRequests1(deferred) {
    console.log('makeMultiAjaxRequests1')
    deferred.resolve()};

function makeMultiAjaxRequests2(deferred) {
    console.log('makeMultiAjaxRequests2')
    deferred.resolve()};

var step1 = function () { 
    var deferred = new $.Deferred();   
    makeMultiAjaxRequests1(deferred); 
    return deferred; }

var step2 = function () {
    var deferred = new $.Deferred();
    makeMultiAjaxRequests2(deferred);
    return deferred; } 

step1().then(step2).done(doSomething);

$.when(step1(), step2()).done(function () {
    doSomething();
});

关于javascript - 使用 jQuery 并行执行多个 promise 后等待完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20479378/

相关文章:

javascript - Materialise 下拉菜单在移动设备中禁用 Sly jQuery 滚动条

javascript - 确定 Google 网络字体是否已加载

node.js - 是否有使用带有 Node 的原始 Q promise 库异步递归遍历目录的示例?

javascript - 模块构建失败 : SyntaxError: Unexpected token regarding quotation marks

javascript - 将 slider /滑动器设置为从第一张幻灯片自动播放

javascript - 翻页,当前站点居中

c# - 如何从头开始实现异步 I/O 绑定(bind)操作?

javascript - 在命令运行时在 Grunt 中显示输出?

javascript - 如何删除网格面板的标题? - ExtJs

javascript - Gulp 和 Babel : Error: Cannot find module