Javascript在数组上逐个执行异步任务
我有一个url数组:Javascript在数组上逐个执行异步任务,javascript,arrays,reactjs,react-native,promise,Javascript,Arrays,Reactjs,React Native,Promise,我有一个url数组: var myurls = ["url1", "url2", "url3"]; 我想一个接一个地获取所有URL 我知道如何手动执行此操作,但不知道如何对阵列执行此操作 fetchUrl1(myurls[0]) .then(function(){ return test_func(myurls[1]); }) .then(function(){ return test_func(myurls[2]); }) .then(function()
var myurls = ["url1", "url2", "url3"];
我想一个接一个地获取所有URL
我知道如何手动执行此操作,但不知道如何对阵列执行此操作
fetchUrl1(myurls[0])
.then(function(){
return test_func(myurls[1]);
})
.then(function(){
return test_func(myurls[2]);
})
.then(function() {
console.log('done');
});
我如何动态地做到这一点 评论中似乎有一些重复的候选者,但这里有一个简明的答案,根据具体要求提供了几种方法: 如果要使用节点样式的回调,可以使用asyncjs;如果要使用Promissions来获取串联的URL,则可以使用bluebird。如果您不需要以串联方式进行抓取,但它们都可以以并行方式进行抓取,asyncjs的each和ES6的Promise.all将允许您这样做 这两种方法都将函数作为输入,因此您将获取原始URL数组并将它们映射到所需的输入函数,最终输出将是一个结果数组我假设URL获取的响应 编辑:包括带有Promise.each的示例代码
var myurls = ["url1", "url2", "url3"];
var myPromisifiedFetchRequests = myurls.map(url => fetch(url));
Promise.each(myPromisifiedFetchRequests).then(myFetchedResults => console.log(myFetchedResults));
你可以用这样的东西。它构建了一个承诺链,将按照原始数组的顺序解析所有结果的数组。如果您想玩它,这里有一个JSFIDLE:
你想调用相同的函数还是不同的函数来获取URL?请参阅此StackOverflow帖子:@JeffHuijsmans的可能副本我认为是一个更好的复制目标。可能副本感谢你的回答这是非常具体的,因为我想使用fetch,我将尝试使用Promise.each并更新你,你有Pormise.each的例子吗?我在react Native上更新了我的答案,提供了如何使用Promise.each的示例代码。如果您有任何其他问题,请告诉我。感谢您的回复。我有一个类型错误:Promise。每个都不是函数
//dummy http.get
function HttpGet(url) {
return new Promise((resolve, reject) => {
console.log(`fetching ${url}`);
setTimeout(function(){
resolve(`done: ${url}`);
}, Math.floor(Math.random()*500));
});
}
function buildPromiseChain(items, func) {
var promise = new Promise((resolve, reject) => {
resolve([]);
});
items.forEach((item) => {
promise = promise.then((result) => {
return func(item).then((itemResult) => {
result.push(itemResult);
return result;
});
});
});
return promise;
}
buildPromiseChain(myurls, HttpGet).then((results) => console.log('done', results));