并行运行Promise
举个例子,如果现在我们想要获取三个国家的基本信息,但是这个顺序是无所谓的;
- 按照我们之前的学习的异步代码,如下:
const get3Countries = async function (c1, c2, c3) {try {const [data1] = await getJSON(`https://restcountries.com/v2/name/${c1}`);const [data2] = await getJSON(`https://restcountries.com/v2/name/${c2}`);const [data3] = await getJSON(`https://restcountries.com/v2/name/${c3}`);console.log([data1.capital, data2.capital, data3.capital]);} catch (err) {console.log(err);}
};get3Countries('Russia', 'Canada', 'tanzania');
- 但是这个带来一个问题,就是第二个AJAX必须等待第一个完成之后才能轮到它,我们可以使其同步运行
Promise.all([getJSON(`https://restcountries.com/v2/name/${c1}`),getJSON(`https://restcountries.com/v2/name/${c2}`),getJSON(`https://restcountries.com/v2/name/${c3}`),]);
- 那这样有什么好处呢,这样的话我们就可以用统一的方式去管理它
const get3Countries = async function (c1, c2, c3) {try {const data = await Promise.all([getJSON(`https://restcountries.com/v2/name/${c1}`),getJSON(`https://restcountries.com/v2/name/${c2}`),getJSON(`https://restcountries.com/v2/name/${c3}`),]);console.log(data.map(d => d[0].capital));} catch (err) {console.log(err);}
};get3Countries('Russia', 'Canada', 'tanzania');
- 但是像上面这样如果三个国家其中一个国家出现了reject,那么整个都会是reject
- 其实像上面的这种组合方式还有很多种,下篇文章再去大家去分享一样