如何通过一个回调异步排队和执行多个promise
How can I queue and execute multiple promises asynchronously with a single callback?
我正在使用http请求库get。有了这个包,http连接是异步的、快速的,并且很容易键入。"got
"恰恰是got
是一个有前景的包,这给我带来了几个挑战。一个是我不知道如何传递对got
的引用。
我需要做的是使用got
和文件流来下载几个url的页面内容。完成所有这些流后,我想继续编写代码。
在这个例子中,我得到的不是一个承诺数组,而是一个响应对象数组。
const getFile = (fileUrl) => {
return new Promise((resolve) => {
got.stream(fileUrl).pipe(fs.createWriteStream(path.basename(fileUrl)))
.on('finish', () => {
successMessage('downloaded ' + fileUrl + '!');
resolve();
});
});
};
// create an array of these got promises
let promises = []
for (let file of body.files) {
promises.push(getFile(file));
}
getFile
助手存在的原因是将got
封装在promise中,以便在执行所有got
之后,我可以使用promise.all
调用:
// after all got's have executed
promises.all(promises).then(() => {
console.log('all promises resolved');
}
寻求帮助,了解如何更改第一个代码段,使promises.all
的行为符合预期。
Promise.all()
,而不是promises.all()
。
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 在Safari执行javascript之前对其进行修改
- Amd,希望确保某个东西总是最后执行
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在执行此特定onclick事件时执行JavaScript函数
- 如何在从浏览缓存加载页面时执行javascript
- 如何通过一个回调异步排队和执行多个promise
- Meteor:排队任务中出现异常:错误:无法执行'removeChild'在'节点':要
- 如果之前在X秒内调用,则阻止并排队执行操作(但仅全局执行一次)
- 在Javascript中,如果函数已经在执行,则对函数的执行进行排队,但取消之前排队的任何函数
- 在执行后排队.net代码
- 循环内的异步函数排队,无需回调即可按顺序执行