Javascript 如何将.map()与承诺相结合?
我有一个数组,对于该数组的每个元素,我需要Javascript 如何将.map()与承诺相结合?,javascript,promise,es6-promise,map-function,Javascript,Promise,Es6 Promise,Map Function,我有一个数组,对于该数组的每个元素,我需要获取一些数据(取决于元素),并将这些数据添加到数组中的元素中 举个例子,我将模拟带有承诺的fetch(在现实生活中,这将是Web服务的答案): let p=new Promise((解析,拒绝)=>resolve('x')) 设a=['a','b'] a=a.map(x=>p.then(y=>x+y)) console.log(a)编辑:这里有一个代码,可以按照您希望的方式工作: let p=new Promise((解析,拒绝)=>resolve(
获取一些数据(取决于元素),并将这些数据添加到数组中的元素中
举个例子,我将模拟带有承诺的fetch
(在现实生活中,这将是Web服务的答案):
let p=new Promise((解析,拒绝)=>resolve('x'))
设a=['a','b']
a=a.map(x=>p.then(y=>x+y))
console.log(a)
编辑:这里有一个代码,可以按照您希望的方式工作:
let p=new Promise((解析,拒绝)=>resolve('x'))
设a=['a','b']
设c=[]
Promise.resolve(a.map(x=>p.then(y=>c.push(x+y)))。然后(()=>console.log(c))
我期望有一个新的数组,但我得到的却是一个承诺数组
这正是它的用意。当然,它不会产生一个简单的数组,而是对它的一个承诺,但是当你做任何异步的事情时,你不能避免它
const promises = a.map(x => p.then(y => x + y))
Promise.all(promises).then(console.log, console.error)
一个例子是将原来的答案@DrNiocool改大,我还要加一个.catch。我不知道为什么它被否决了——也许那个人可以解释为什么。@DrNio它被否决了,因为它不起作用。在p
中有一个超时(而不是立即解决),它会崩溃。好的,谢谢您的注意!是的,完全可以在映射内执行异步操作。然而,充其量,你会得到一系列的承诺。然后必须使用该数组才能获得结果。映射不可能直接返回结果,因为映射在结果存在之前返回。相关:Aslo Related:@KevinB:我相信第二个“相关”链接正是我的问题。我还在消化它,但它看起来确实如此。谢谢酷-缺少.catch
语句,尽管:)看起来clean@DrNio你是说每个承诺链都应该以一个错误处理程序结束?补充。就是这个,谢谢。它还与KevinB评论中的“相关”链接相匹配(我将自己标记为重复),在这样一个小例子中,你为什么会关心这些事情?