gpt4 book ai didi

javascript - 如何将第一个 promise 的返回值传递给链式 promise 中的最后一个 promise

转载 作者:行者123 更新时间:2023-11-28 17:59:33 24 4
gpt4 key购买 nike

我有一个令人困惑的问题:

我使用 promise 链来调用几个函数,如下所示:

 CommonPromiseLists.checkStatusPromise().then(CommonPromiseLists.getChannelPreferencePromise).then(CommonPromiseLists.getChannelsPromise).then(getUniqueStory.bind(null, storyId))

如您所见,函数被相应地调用,我得到了正确的结果。但是,根据最近的需求更改,现在我需要将 CommonPromiseLists.checkStatusPromise() 的返回值传递给 getUniqueStory.bind(null,storyId),这是我调用的最后一个 Promise。我心中有一个解决方案:因此,每当我返回并将返回值交给下一个 promise 时,我也可以包含第一个 promise 的返回值。但我相信应该有一种更简单的方法。有没有更好的方法可以获取 checkStatusPromise() 的返回值并将其传递给 getUniqueStory.bind(null,storyId,第一个 Promise 的返回值)?

最佳答案

您可以通过 Promise 链传递结果,但这会使代码紧密耦合,要求后续回调将奇怪的结构预测为解析值。

使用简单的 Promise,一种更简单的方法是将其余操作包含在 checkStatusPromise 回调中。这样,checkStatusPromise 的结果就会公开。

CommonPromiseLists.checkStatusPromise().then(res => {
return CommonPromiseLists.getChannelPreferencePromise(res)
.then(CommonPromiseLists.getChannelsPromise)
.then(getUniqueStory.bind(null, storyId, res)) // access res
});

如果你可以使用 async-await,它会变得更容易一些:

async enclosingFunction(){
const status = await CommonPromiseLists.checkStatusPromise();
const channelPreference = await CommonPromiseLists.getChannelPreferencePromise(status);
const channels = await CommonPromiseLists.getChannelsPromise(channelPreference);
const uniqueStory = await getUniqueStory.bind(null, storyId, res)
return uniqueStory;
}

enclosingFunction().then(value => /* results */)

关于javascript - 如何将第一个 promise 的返回值传递给链式 promise 中的最后一个 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43807698/

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