javascript - 然后 Angularjs 在 for 循环中根据 Promise 运行。如何访问当前项目的索引?

标签 javascript angularjs promise restangular jshint

我有一个循环,它循环遍历 AngularJS 中对象的所有属性,并且对于每个属性,它使用 Restangular 进行 AJAX 调用。 请求完成后,我想将该项目的 isNew 属性设置为 false。

目前正在运行的当前实现看起来像这样(删除了不重要的部分):

var promises = [];
for (var prop in items) {
    if (items.hasOwnProperty(prop)) {

        var newPromise = REST.Items
                        .all('items')
                        .post({ key: items[prop].key, value: items[prop].value })
                        .then(function (prop) {
                            items[prop].isNew = false;
                        }.bind(this, prop));

        promises.push(newPromise);
    }
}
return $q.all(promises);

这个实现似乎工作得很好,但是 jshint 提示在循环内创建函数:“不要在循环内创建函数。}.bind(this, prop));”

重构这部分代码的最佳方法是什么?

最佳答案

请参阅下面代码片段中的解决方案

var promises = [];
var handler = function (prop) {
    items[prop].isNew = false;
};

for (var prop in items) {
    if (items.hasOwnProperty(prop)) {

        var newPromise = REST.Items
                        .all('items')
                        .post({ key: items[prop].key, value: items[prop].value })
                        .then(handler.bind(this, prop));

        promises.push(newPromise);
    }
}

return $q.all(promises);

关于javascript - 然后 Angularjs 在 for 循环中根据 Promise 运行。如何访问当前项目的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33670518/

相关文章:

angularjs - $routeProvider 未触发 Controller

javascript - 在 forEach 循环中使用 async/await

javascript - 从 JQuery 对象创建 Javascript 对象

Mac (Safari) 上的 Javascript toLocaleTimeString() 奇怪之处

具有 NULL 时间的 Javascript Date() 对象

node.js - Nodejs等待查询

javascript - LocalForage、图像和 Blob

来自 Google 自定义搜索的 Javascript 错误和 GET 请求失败

javascript - 单击 angularjs 中的链接后将 ID 传递到下一页

angularjs - 重新排序数组时如何使用angular-animate触发ng-move?