den*_*nse -1 javascript asynchronous node.js async-await apollo
我正在关注阿波罗教程(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”方法),则返回的承诺将“跟随”那个 thenable,采用其最终状态;否则返回的承诺将用该值实现。该函数将嵌套的类承诺对象层(例如,解析为解析为某事的承诺的承诺)扁平化为单个层。
而且,由于您的箭头函数返回的 ( dataSources.userAPI.findOrCreateUser()) 是一个 Promise,由于这种“扁平化”,async无论是否具有相同的行为。
| 归档时间: | 
 | 
| 查看次数: | 3572 次 | 
| 最近记录: |