我想知道是否有更好的方法在 JavaScript 中执行异步循环?我一直在使用以下递归方法,但我觉得可能有一种更清洁的方法。任何链接/建议将不胜感激。谢谢
var titles = ['Test 1', 'Test 2', 'Test 3'];
var i = 0;
addColumns();
function addColumns () {
if (i < titles.length) {
var data = {
'__metadata': { 'type': 'SP.FieldText' },
'FieldTypeKind': 3,
'Title': titles[i],
'MaxLength': '22'
};
postToSP.createColumns(baseURL, listName, data)
.then(function () {
i++;
addColumns();
})
.catch(function(e){
console.log('Error: ' + e);
})
} else {
return;
};
};
假设执行是与值无关的(即一个不依赖于前一个的值)而是顺序的(它们必须以确定性顺序来回完成):
var allDone = titles.reduce((prev, title) => {
var data = {
'__metadata': { 'type': 'SP.FieldText' },
'FieldTypeKind': 3,
'Title': title,
'MaxLength': '22'
};
return prev.then(_ => postToSP.createColumns(baseURL, listName, data));
}, Promise.resolve(true));
这将使一系列 ajax 请求排队,只有在前一个请求完成后才会启动。错误处理留给读者作为练习。如果电话没有必须按照一定的顺序来完成,这是干净多了这种方式:
let allDone = Promise.all(titles.map(title => postToSP.createColumns...));
无论哪种方式,现在您都有一个 Promise,它将在所有异步调用完成时解决。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句