我不明白如何连接承诺:
getUser
是一个promise函数,search
也是一个promise函数。 getUser
将返回语言值。
此数据不是数组值,应由search
函数
getUser(userId)
.then(({ language }) => {
const data = search('content', language)
res.send(200, {
content: data,
user: { language }
})
})
.catch((error) => next(error))
答案 0 :(得分:1)
为了避免嵌套,您可以使用Promise.all
:这样您也可以通过链传递language
值:
getUser(userId)
.then(({ language }) =>
Promise.all([language, search('content', language)])
).then(([language, data]) =>
res.send(200, {
content: data,
user: { language }
})
).catch((error) => next(error))
答案 1 :(得分:0)
如果search
返回一个承诺,那么您需要使用.then()
来访问该承诺中的数据。你应该返回承诺,以便在更高层次上进行链接:
getUser(userId)
.then(({ language }) => {
return search('content', language)
.then((data) => {
res.send(200, {
content: data,
user: { language }
});
})
.catch((error) => next(error))
请注意,通常您可以通过返回search()
返回的承诺来避免嵌套,并在之后链接另一个.then()
调用,但是因为您尝试从原始方法捕获语言参数调用,您需要将值放在范围内。 Trincot的答案显示了如何捕获language
的值以获得更好的链接。