gpt4 book ai didi

javascript - promise 的 promise 到简单的 promise ?

转载 作者:行者123 更新时间:2023-11-29 15:34:04 28 4
gpt4 key购买 nike

我一直在玩 promise,通常能想出如何处理好它们,但在这种情况下,我不知道如何删除一个 promise-wrapping level。

代码如下:

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 本身就是一个 promise 。

当然,我可以使用它,但我发现代码非常丑陋,我想简化它以便您可以:

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 is a promise itself.

不,不是。 Ember 确实使用 RSVP ,即 Promises/A+ compatible ,这意味着 then 回调永远不会用 promise(或 thenable)调用。他们总是收到一个简单的值。

Promises/A+ 确实要求没有从 then 返回的嵌套 promise 。它们总是递归地展开。你可以这样做

promise2.then(connections => console.log(connections));

如果这真的不起作用,那就表明 promise1 不是真正的(或者至少不是符合标准的) promise ,你应该做 promise1 = Promise.resolve( promise1) 首先。

关于javascript - promise 的 promise 到简单的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460295/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com