javascript - 我需要的是一连串的 promise 吗

标签 javascript jquery ajax promise q

我有一个函数需要在完成几个 Ajax 调用后运行。当前,每个 AJAX 调用都被一个接一个地调用,并且当前在各自的回调中工作。这是一个 promise 链的候选者,因为每个 ajax 调用只有在其各自的测试为真时才会运行吗?而且我不一定需要连续运行这些调用,只是我在最后得到一个回调(当所有满足要运行的条件的 Ajax 调用完成它们各自的回调时)。

if(MyTest1){
  RunMyAjaxCall1(param1,param2,successAjaxCallback1,failureAjaxCallback1);
}
if(MyTest2){
  RunMyAjaxCall2(param1,param2,successAjaxCallback2,failureAjaxCallback2);
}
if(MyTest3){
  RunMyAjaxCall3(param1,param2,successAjaxCallback3,failureAjaxCallback3);
}
if(MyTest4){
  RunMyAjaxCall4(param1,param2,successAjaxCallback4,failureAjaxCallback4);
}

示例 AJAX 调用

RunMyAjaxCall1 = function (param1,param2, successCallback, failureCallback) {
    $.ajax({
        type: "POST",
        datatype: 'json',
        url: "/WebServices/GlobalWebService.asmx/webservicemethod1",
        data: JSON.stringify({ param1: param1, param2: param2 }),
        contentType: 'application/json; charset=utf-8',
        success: function (data) { successCallback(data.d); },
        error: function (data) { failureCallback(data.d) }
    });
}

最佳答案

你可以使用这个:

var requests = [];
if (MyTest1) {
    requests.push(RunMyAjaxCall1(param1,param2,successAjaxCallback1,failureAjaxCallback1));
}
// ...continue with other if statements

$.when.apply(null, requests).always(function () {
    // All handlers used are done (either succeeded or failed)
});

既然你说你在进行 AJAX 调用,我假设你正在使用 $.ajax。调用 $.ajax 返回的值是一个 PromiseRunMyAjaxCallX 函数需要返回此值才能使该方案起作用。

使用 requests 允许以动态方式对请求进行分组。 if 语句确定执行和包含哪些语句。

使用 $.when(将 requests 作为参数传递)创建一个新的 Promise,包含您确定应该被包括在内。然后使用 .always() 方法,它会在所有包含的请求完成时运行。

这是一个工作示例: http://jsfiddle.net/vmw8H/

一些引用:

http://api.jquery.com/jQuery.when/

http://api.jquery.com/deferred.always/

关于javascript - 我需要的是一连串的 promise 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15895412/

相关文章:

javascript - 如何使用 jQuery 获取开瓶器的元素?

Javascript 正则表达式 "replace(/[ -_]/g)"删除数字?

jQuery - RCarousel 幻灯片 - 动态宽度?

javascript - 在Javascript中使用三元运算符将字符串转换为 bool 值?

php - 执行从 AJAX 响应返回的 javascript 函数 (PHP)

html - Ajax 表单提交,无法弄清楚为什么它不起作用

java - 使用 JSF 的动态网页

javascript - Ember 在哪里放置 jquery 就绪函数?

javascript - 如何在TD标签中添加id?

javascript - 有没有办法在每次单击鼠标左键时模拟按 Ctrl 键?