gpt4 book ai didi

javascript - 保存异步代码node.js的 'result'值

转载 作者:行者123 更新时间:2023-12-01 02:44:12 24 4
gpt4 key购买 nike

我有一些基于 promise 的非常重的代码,我希望将其分解,并转移到 async/await。

但是我遇到了一个问题 - 对于以下问题什么是好的设计模式。本质上,我有一些依赖于“ promise ”的前一步的东西。

如何将值传递到下面的 block ?或者只是将其初始化为某种东西以便我可以保留它?

谢谢,奥利

let sess;

// if has experts
if (!_.isEmpty(data.expertIds)) {
// create expert campaign sessions
const sessions = await util.createSessions(data.expertIds, newCampaignId);
Promise.all(sessions)
.then((s) => {
// if sessions created, set this var to true!
sess = true;
debug('Sessions created');
})
.catch((error) => { throw error; });
}

debug(sess) // undefined
debug(await sess) // undefined
...lots and losts more code...
<小时/>
let newCampaignId;
// save the new campaign as a draft
newCampaign
.save()
.then((campaign) => {
newCampaignId = campaign._id;
debug('New campaign saved', campaign);
})
.catch((error) => { throw error; });

debug(newCampaignId) // undefined
debug(await newCampaignId) // undefined

最佳答案

如果稍后需要,您需要从 then() 返回值。 then() 返回一个 Promise——这个返回的 Promise 就是您需要 await 的内容。这是您正在等待的 promise 的最终解决值。例如:

// save the new campaign as a draft
var a_promise = newCampaign
.save()
.then((campaign) => {
debug('New campaign saved', campaign._id);
return campaign._id // make sure you return something
})

debug(await a_promise) // should be defined now

返回 campaign._id 在这里至关重要。

不过,您所做的构造有点笨拙。由于 save() 返回一个 promise ,您应该能够简单地执行以下操作:

let campaign = await newCampaign.save()
debug(campaign._id)

当然,所有这些都假设您位于 async 函数内。

关于javascript - 保存异步代码node.js的 'result'值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47370830/

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