javascript - 使用顺序 Promise 在 Javascript 和 jQuery 中运行一些 ajax 请求

标签 javascript jquery ajax

我的步骤数组如下:

var stepsToDo = [step1, step2, step3,...]

每一步都会调用ajax:

function step1() { return $.ajax({ ... }); }
function step2() { return $.ajax({ ... }); }

步骤 1 的示例 Ajax 调用(步骤 2 和其他类似):

return $.ajax({
            url: "test.php",
            type: "POST",
            dataType: "json",
            data: {"step-1": ""},
            beforeSend: function () {
                writeResult("Processing-> test 1");
            },
            success: function (result) {
                if (result) {
                    if (result instanceof Array) {
                        writeResult("Found: " + result.length + " items");
                        arr = result;
                    } else {
                        writeResult(result);
                        arr = [];
                    }
                }
            }
        });

function writeResult(str)  { console.log(str); }

我想按顺序执行(在stepsToDo中定义)。

我尝试过:

stepsToDo.reduce(
    (promise, method) => {
        return promise.then(method);
    },
    Promise.resolve()
);

没有任何反应,控制台中没有打印。

为什么?

最佳答案

删除新的 Promise。您的步骤是返回 promise 的函数,而不是 promise executors - 他们永远不会调用传递给他们的 resolve 回调。

关于javascript - 使用顺序 Promise 在 Javascript 和 jQuery 中运行一些 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48608154/

相关文章:

javascript - 仅一个字符 (*) 或其他字母数字的正则表达式

php - 刷新图像 PHP 和 Javascript

javascript - 单击时动态禁用/启用 Bootstrap 下拉菜单中的链接

javascript - 我如何让声明 "for"在 javascript 中等待

javascript - localtime.js 不适用于 ajax 之后创建的元素

javascript - 为什么 keydown() 会出现此错误?

Javascript - 如果存在过去的日期,则不运行函数

javascript - datatable jquery 如何在控制台中查看表的数据

javascript - Django 中的 AJAX - 单击元素会更新与更新脚本相关的所有计数器。我怎样才能防止这种情况发生?

jquery - : 1.(ajaxStart 和 ajaxSend)和 2.(ajaxStop 和 ajaxComplete)有什么区别?