gpt4 book ai didi

javascript - 访问 Promise 链中的外部变量

转载 作者:搜寻专家 更新时间:2023-10-31 23:24:29 25 4
gpt4 key购买 nike

我想知道我是否在用这个示例代码做任何可怕的事情:

something.on('register', function(user) {
client.setAsync(config.id, user.id) // From a package (I can't set the return value)
.then(function(){
return user; // is this OK?
})
.then(handleNewUser)
.then(getSomeStuff)
.catch(function(err) {
console.error("Promise chain error: ", err);
});
});

会不会有范围问题? (用户不是我想的那样的竞争条件?)

我能否以更优雅的方式传递用户?

最佳答案

如果有的话,与 client.setAsync() 返回 user< 相比,您的模式更好地保证相同的 user/。如果包写得不好或记录不当,您可能会完全收回其他一些对象。

但有一个条件 - 您的 user 对象不能由中间 client.setAsync() 进程扩充。除非 user 本身作为参数传递给 client.setAsync(),否则没有这样做的机制。只能假设在这种情况下这不是问题。

使用你所拥有的,唯一明显的改进是用更少的 .then() 形成你的链,如下所示:

something.on('register', function(user) {
client.setAsync(config.id, user.id) // From a package (I can't set the return value)
.then(function() {
return handleNewUser(user);
})
.then(getSomeStuff)
.catch(function(err) {
console.error("Promise chain error: ", err);
});
});

您可能会喜欢阅读此 question and its answers .特别是,找到标题为“嵌套(和)闭包”的答案,您会发现在闭包中访问以前的值是完全合理和适当的。

关于javascript - 访问 Promise 链中的外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34267519/

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