按顺序读取Promise
2022/1/24 23:04:36
本文主要是介绍按顺序读取Promise,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
有一个文件列表,要按顺序读写文件,用for循环读取,不能用forEach
async function printFiles () { let fileNames = ['picard', 'kirk', 'geordy', 'ryker', 'worf']; for (const file of fileNames) { const contents = await fs.readFile(file, 'utf8'); console.log(contents); } }
async function someFunction(items) { items.forEach( async(i) => { const res = await someAPICall(i); console.log('--->', res); }); } function someAPICall(param) { return new Promise((resolve, reject)=>{ setTimeout(()=>{ resolve("Resolved" + param) },param); }) } someFunction(['3000','8000','1000','4000']);
forEach
循环不是按顺序进行API调用,而是一个接一个连续地调用API,中间不等待前一个调用完成。
可以使用reduce
函数来遍历数组并按顺序解析promise
function testPromise(time) { return new Promise((resolve, reject) => { setTimeout(() => { console.log(`Processing ${time}`); resolve(time); }, time); }); } let result = [3000,2000,1000, 4000].reduce( (accumulatorPromise, nextID) => { return accumulatorPromise.then(() => { return testPromise(nextID); }); }, Promise.resolve()); result.then(e => { console.log("All Promises Resolved !!✨") });
按顺序解析promise的另一种方法是使用异步生成器
async function* readFiles(files) { for(const file of files) { yield await readFile(file); } };
并行解析Promise---想要并行读取,而不是按顺序读取文件
不关心内容在控制台中的打印顺序。因此就可以将Promise.all()
函数与map
一起使用
async function printFiles () { let fileNames = ['picard', 'kirk', 'geordy', 'ryker', 'worf']; await Promise.all(fileNames.map(async (file) => { const contents = await fs.readFile(file, 'utf8'); console.log(contents); })); }
每个async
回调函数调用都会返回一个promise,我们将它们保存起来,并与Prmiss.all()
并行地一次性进行解析
这篇关于按顺序读取Promise的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南