【发布时间】:2019-08-15 12:24:58
【问题描述】:
我调用一个函数,然后在控制台中输出它的返回值,如下所示:
Index.getInitialProps = async ctx => {
const { loggedInUser } = await checkLoggedIn(ctx)
console.log('Data actually returned:')
console.log(loggedInUser)
return { loggedInUser }
}
非常直接......
checkLoggedIn函数如下:
export function checkLoggedIn(ctx) {
ctx.apolloClient.query({
query: GET_ME,
})
.then(({ data }) => {
console.log('Data to be returned:')
console.log(data)
return { loggedInUser: data }
})
.catch(() => { return { loggedInUser: {} } })
}
再一次,非常直截了当。这基本上是此示例的精确副本:checkLoggedIn() 和 getInitialProps
现在我预计会在控制台中看到以下内容:
Data to be returned:
{ <DATA> }
Data actually returned:
{ loggedInUser: { <DATA> }
相反,我看到了:
Data actually returned:
undefined
Data to be returned:
{ <DATA> }
当函数返回正确的数据时,这是零意义的,它应该在继续到 console.log 之前等待返回的数据。
相反,它完全忽略了“等待”,甚至无需等待函数返回值,然后继续。
这是怎么回事?
【问题讨论】:
-
您是否缺少resolve() 而不是return?
-
@IonicBurger — 不。没有手动创建的 Promise 需要解决。承诺解决由
apolloClient的内部在幕后处理。
标签: javascript