这次我创建了一个像这样的Promise.all Call。 tools.isMember 和 tools.unsubscribe 将返回承诺对象。
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))
控制台打印
未订阅结果=>未定义
我尝试将日志记录稍微调试一下,然后将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))
现在控制台显示
未订阅结果=>未定义
来自Tools =>的结果1
所以现在我知道承诺是从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))
控制台打印
未订阅结果=>未定义
答案 0 :(得分:1)
你需要从你的地图返回一个承诺,目前你还没有返回任何东西,相当于未定义的箭头函数,在主体块周围需要显式返回花括号,所以你要么添加它,要么删除它花括号。
你也不需要地图中的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。
我的意思是将返回放在箭头函数体中或删除花括号{和}是
(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
}