![](/img/trans.png)
[英]Using async/await to get data from a callback and return a value only after a promise is resolved
[英]Is it possible to return resolved value from promise without async/await?
我正在关注阿波罗教程( https://www.apollographql.com/docs/tutorial/resolvers/ ),我看到了这段代码:
me: async (_, __, { dataSources }) =>
dataSources.userAPI.findOrCreateUser()
因为dataSources.userAPI.findOrCreateUser()
返回Promise ,我认为await dataSources.userAPI.findOrCreateUser()
是正确的。
但它运行得非常好,没有任何错误,我在 React 中得到了解决的价值……即使是下面的代码也运行良好。
me: (_, __, { dataSources }) =>
dataSources.userAPI.findOrCreateUser()
这段代码让我很困惑。 它是如何工作的?
除了启用await
, async
隐式地将函数的结果包装到Promise.resolve()
。 大致:
async function() {
return something;
}
相当于:
function() {
return Promise.resolve(something);
}
事情是Promise.resolve()
“扁平化”它的参数,这意味着如果它的参数是一个thenable (例如另一个 Promise),它会自动“解析”它。 换句话说, Promise.resolve(somethingThatIsAPromise).then(<work>)
具有与somethingThatIsAPromise.then(<work>)
相同的效果。
MDN 试图解释这种行为(粗体是我的):
Promise.resolve()
方法返回一个使用给定值解析的Promise
对象。 如果值是一个承诺,则返回该承诺; 如果值是 thenable(即有一个“then
”方法),则返回的 promise 将“跟随”那个 thenable,采用它的最终状态; 否则返回的承诺将用该值实现。 该函数将嵌套的类似承诺的对象层(例如,解析为解析为某事的承诺的承诺)扁平化为单个层。
而且,由于您的箭头函数返回的内容( dataSources.userAPI.findOrCreateUser()
)是一个 Promise,由于“扁平化”, async
与否最终会以相同的行为结束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.