我正在尝试运行一个for循环,它将一组异步请求排队。所有请求完成后,不管它们是解析
还是拒绝
,我都想运行一些代码。我试图利用异步/等待模式,因为它看起来更好。:)
这就是我正在做的:
var promises = []
for ( item in list ) {
prom = AsyncFunction( item )
promises.push(prom)
}
await Promise.all(promises)
doMoreAfter()
然而,有些promise失败了,第二种情况是promise。all()
也会失败。
我想简单地忽略任何失败的promise,并在所有promise完成后运行下一段代码。
我找到了这样的解决方案。
Promise.all([a(), b(), c()].map(p => p.catch(e => e)))
.then(results => console.log(results)) // 1,Error: 2,3
.catch(e => console.log(e));
但当试图将其转换为异步/等待格式时,它看起来不起作用。
await Promise.all(promises.map(p => p.catch(e => e)))
我错过了什么?
我试着这样运行您的示例:https://jsfiddle.net/804ogadu/3/
var a = Promise.resolve('a');
var b = Promise.resolve('b')
var c = Promise.reject('errc');
async function test(){
const t = await Promise.all([a, b, c].map(p => p.catch(e => e)));
console.log(t);
}
test();
我确实得到了要求的结果
['a,'b','errc']
我觉得你能做的最好的就是:
var promises = [a, b, c];
promises = promises.map(p => p().catch(e => undefined));
values = await Promise.all(promises);
console.log(values); // ["a", undefined, "c"]
https://jsfiddle.net/DerekL/h5Lmxaqq/
或者您可以创建一个忽略
函数:
function ignore(promise){
return promise.catch(e => undefined);
}
async function main(){
var promises = [a(), b(), c()];
var values = await Promise.all(promises.map(ignore));
console.log(values);
}
https://jsfiddle.net/DerekL/mwkww7w9/
我用webpack建立了一个浏览器umd库。 我正在侦听输入文件的onchange事件。当有人提交图像/文件时,它会将其转换为base64。我试图让它尽可能看起来不那么明显,所以我使用了promises和wait/asynchttps://blog.shovonhasan.com/using-promises-with-filereader/. 但是,有一个问题-当我调用convertToBase
问题内容: 示例了如何使用内置的加密库和流来计算文件的md5。 但是是否可以将其转换为使用ES8异步/等待而不是使用上述回调,但仍保持使用流的效率? 问题答案: / 仅适用于promise,不适用于流。有一些想法可以制作一种类似流的额外数据类型,该数据类型将具有自己的语法,但是如果有的话,这些想法是高度实验性的,我将不赘述。 无论如何,您的回调仅等待流结束,这非常适合兑现承诺。您只需要包装流: 现
问题内容: 我一直在浏览/ 在浏览了几篇文章之后,我决定自己测试一下。但是,我似乎无法绕开为什么这行不通的想法: 控制台输出以下内容(节点v8.6.0): 外部:[对象承诺] 内部:嘿 为什么函数内部的日志消息随后执行?我认为创建/ 的原因是为了使用异步任务执行同步执行。 有没有办法可以使用函数内部返回的值而不使用after ? 问题答案: 我似乎无法绕开为什么这行不通的想法。 因为回报承诺;所有
我想进行一个基于当前状态的API调用,但不能使setState函数作为异步函数工作。 给我错误: 类型为“”的参数(状态:只读)= 如果我在setState方法之外获取数据,它会起作用,但我害怕对过时的页码进行API调用:
我需要在函数中运行各种步骤,但步骤必须按特定顺序运行。我尝试实现一个函数,如下所示: 控制台中的预期结果应该是1,2,3,但我得到了3,2,1。似乎忽略了参数。 编辑功能在上面的示例中仅用于模拟繁重的任务。在我的项目中,我不会使用它。事实上,我需要连接到一个数据库,然后在进入下一步之前重新格式化结果。即使包括,2也会在1之前登录。换句话说,空列表被传递到我的图形,因为没有考虑。以下是我当前的代码:
我有一个windows服务,我从另一个开发人员继承,它运行非常慢,并有许多对eBay API的缓慢调用。我希望在没有太多重构的情况下加快它。 我刚刚开始研究使用C#Async/Await来尝试让这些缓慢的调用运行异步。以下是我试图实现的目标: 如何获取返回的类型以便使用它们?我尝试使用,但它只有属性可用。