gpt4 book ai didi

javascript - Promise.All 与对象映射 - 未定义

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

这次我创建了一个像这样的 Promise.all 调用。 tools.isMembertools.unsubscribe 将返回 Promise 对象。

   tools.isMember(userid)
.then(results => {

Promise.all(
Object.keys(results).map((key, index) => {
tools.unsubscribe(results[index], userid)
})
)

})
.then(unsubscribe => { console.log('Unsubscribed Results => ', unsubscribed)})
.catch(err => console.log(err))

控制台打印

Unsubscribed Results => undefined

我尝试将日志记录向上移动一点以进行调试,并将 console.log 放在 tools.unsubscribe 所在的位置

   tools.isMember(userid)
.then(results => {

Promise.all(
Object.keys(results).map((key, index) => {
tools.unsubscribe(results[index], userid).then(result => { console.log('Result from Tools => " result) }) //Added Logging Here
})
)

})
.then(unsubscribe => { console.log('Unsubscribed Results => ', unsubscribe)})
.catch(err => console.log(err))

现在控制台显示

Unsubscribed Results => undefined

Result from Tools => 1

现在我知道 Promise 正在从 tools.unsubscribed 返回预期结果,但是 Promise.all 应该返回一个包含所有结果的数组?现在显示未定义。

我尝试了许多不同的故障排除方法,但我对 Promise 还很陌生。试图找出 Promise.all 这一次出了什么问题。

更新了@Bergie:添加了tools.unsubscribe的返回

   tools.isMember(userid)
.then(results => {

Promise.all(
Object.keys(results).map((key, index) => {
tools.unsubscribe(results[index], userid).then(result => { return result })
})
).then(result => { return result }) //Tryning to interpret Bergie's answer
})
.then(unsubscribe => { console.log('Unsubscribed Results => ', unsubscribed)})
.catch(err => console.log(err))

控制台打印

Unsubscribed Results => undefined

最佳答案

您需要从 map 中返回一个 promise ,目前您没有返回任何内容,这相当于未定义,主体 block 周围带有大括号的箭头函数需要显式返回,因此您要么添加它,要么删除大括号.

您也不需要 map 内的 then,您需要返回 unsubscribe() 调用的结果,它本身就是一个 Promise。

所以你的代码应该是:

tools.isMember(userid)
.then(results => {
Promise.all(
Object.keys(results).map((key, index) => tools.unsubscribe(results[index], userid))
).then(unsubscribe => { console.log('Unsubscribed Results => ', unsubscribed)}) //unsubscribe is an array
.catch(err => console.log(err))
})

编辑:

then() 是 Promise 对象的方法,因此您应该在 Promise 实例上调用它。请参阅the MDN documentation page了解更多详情。

我将 return 放入箭头函数体或删除大括号 { 和 } 的意思是

(x, y) => x + y 
//is equivalent to
(x, y) => {
return x + y
}
//while
(x, y) => {
x + y
}
//is equivalent to
(x, y) => {
x + y
return
}

关于javascript - Promise.All 与对象映射 - 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49965988/

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