javascript api 调用,按特定顺序发送和处理数据

标签 javascript jquery angularjs

我有一个 API 调用,我确保数据按照发送的顺序返回。然而,我意识到这并不是我真正想要的,我想确保一次发送一个数据并得到处理。

数据[n]在数据[n+1]发送之前已返回。

原因是:

如果我按照如下所示执行此操作,服务器仍然以随机顺序获取它,因此以随机顺序将数据保存在我的数据库中。 (或者不是随机的,较重的数据处理速度较慢)

var promiseArray = [];
for (var i = 0; i < data.length; i++) {
  var dataPromise = $http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
    .then (function (response) {
         //return data for chaining
         return response.data;
    });
promiseArray.push(dataPromise);
}

$q.all(promiseArray).then(function (dataArray) {
 //succes 
}).catch (function (errorResponse) {
 //error
});

如何确保一次一个数据顺利地发送、处理和返回?

最佳答案

你可以这样做:

var i = -1;
processNextdata();

function processNextdata() {
    i++;

    if(angular.isUndefined(data[i]))
        return;

    $http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
        .then(processNextdata)
}

更新:

每次结果后回调:

var i = -1;
processNextdata();

function processNextdata() {
    i++;

    if(angular.isUndefined(data[i]))
        return;

    $http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
        .then(function(result) {
            // do something with a single result

            return processNextdata();
        }, errorCallback);
}

一切完成后回调:

var i = -1, resultData = [];
processNextdata()
    .then(function(result) {
        console.log(result);
    }, errorCallback);

function processNextdata() {
    i++;

    if(angular.isUndefined(data[i]))
        return resultData;

    $http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
        .then(function(result) {
            resultData.push(result.data);
            return processNextdata();
        }, $q.reject);
}

关于javascript api 调用,按特定顺序发送和处理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36501340/

相关文章:

javascript - 我可以在没有 Redux Thunk 中间件的情况下分派(dispatch)多个操作吗?

javascript - 如何在功能组件中渲染数据之前等待 FETCH?

jQuery addClass 高度问题

javascript - PhoneGap 在 HTML 中加载本地页面

java - 在 JSP 中从 JavaScript/jQuery 调用后端 Java 方法

javascript - 带有 templateUrl 和 ng-repeat 的自定义指令

javascript - 如果需要,删除 CSS 选择器及其相关属性

javascript - 单击按钮时添加 HTML 表单

参数内部的 Javascript 函数?

javascript - 组件中的 angularjs 'bindings' 不起作用