【发布时间】:2015-10-06 06:11:52
【问题描述】:
我一直在玩 promise,通常可以弄清楚如何很好地处理它们,但在这种情况下,我不知道如何删除一个 promise-wrapping 级别。
代码如下:
let promise2 = promise1.then((nodes) => {
return Promise.all(nodes.map(n => {
// findConnections returns a promise
return this.findConnections(n.get("spotifyData"));
}));
});
现在我希望promise2 包装一个数组,但它没有,它包装了一个包装数组的promise。如果我想访问数组,我必须这样做:
promise2.then(level1 => level1.then(level2 => console.log(level2)));
level1 本身就是一个承诺。
当然,我可以使用它,但是我发现代码非常丑陋,我想简化它以便您可以这样做:
promise2.then(level1 => console.log(level1))
并直接在那里得到一个数组。
有什么想法吗?
谢谢!
编辑:
findConnections() 方法:
findConnections: function (node) {
return Ember.$.get("https://api.spotify.com/v1/artists/" + node.id + "/related-artists").then((data) => {
return data.artists;
});
}
【问题讨论】:
-
level1 本身就是一个承诺。 - 不,它是一个值数组。检查示例here
-
那为什么不使用 .then() 就不能访问它的内容呢?
-
好的,那么还有其他一些我无法诊断的问题,因为在我的情况下,最后一次调用
promise2.then(console.log.bind(console));记录了 Promise。知道为什么吗? -
尝试在
promise2.then(console.log.bind(console));行之后添加console.log('processing');。我认为您可能会将 REPL 的输出与console的输出混淆。
标签: javascript promise