2016-03-25 38 views
0

以下代码在最后一个处理程序中解析为Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}Promise.all()方法未解析为值

虽然在向控制台发送承诺时录制阵列时,每个都有状态resolved,并且所有请求都得到满足。

MusicService 
    .getArtists() 
    .then((res) => { 
    let arr = res.filter((a) => { 
     return a.id.length; 
    }); 
    return Promise.all(arr.map(function(a) { 
     return fetch(`//service.com/api/artist/${a.id}`); 
    })); 
    }) 
    .then((res) => { 
     console.log(res); 
    }); 

那么,我错过了什么让这个工作?

+1

如果你在任何'then's中有一个失败回调会发生什么?还是一个'catch'? – Neal

+1

@NielsSteenbeek承诺是如何工作的。在一个承诺中,你可以返回一个承诺,并将它链接在承诺链中。 – Neal

+0

“以下代码在最后一次处理程序中解析为'Promise {[[PromiseStatus]]:”pending“,[[PromiseValue]]:undefined}'。是的,你期望什么? –

回答

1

FWIW,这可以简化为:

MusicService 
    .getArtists() 
    .then(res => Promise.all(
    res 
     .filter(a => a.id.length > 0) 
     .map(a => fetch(`//service.com/api/artist/${a.id}`)) 
    ) 
) 
    .then(res => { 
    console.log(res); 
    }); 

在过去的回调,res将是fetch()结果的阵列,它不可能是别的。

+0

是的,它必须是一个数组,但我仍然得到的是这条线,那个承诺正在等待。 –

+1

如果我用返回promise的样机'getArtists()'和'fetch()'函数测试这个exaxt代码,那么我在回调中得到一个数组值。你是否超级地确信a)你有这个代码(并且没有细微的差别),b)你的fetch函数实际上是否返回值的承诺(而不是稍微不同)? – Tomalak

+0

我再次检查了一切,我仍然无法弄清楚发生了什么问题。无论如何,谢谢你的努力。 –