如何将此代码从同步传输到asynchronous(nodejs)?

我是新来的node.js和callback的概念。 我有Rails,PHP等的经验,现在我正在学习node.js。

我想创build一个使用Google GMail API的简单邮件客户端。 示例代码位于: https : //developers.google.com/gmail/api/quickstart/nodejs

我想把我的MEAN应用程序中的一部分gmail API作为一个模块来使用。 我已经把快速启动代码放到模型中,并且能够将我的gmail帐户的标签打印到控制台。

现在我想要a)返回数组(标签,消息等),而不是仅仅打印它们; b)重用应用程序的不同部分以用于不同的用例(例如,authentication,…)

快速启动文件的结构是这样的:

- read client_secret asynchronously - callback to authorization - callback to getNewToken (if needed) - callback to listLabels (Function that prints the labels) 

在一个同步世界中,我要做的就是创build所有这些函数(getClientSecret,getAuthorization,getNewToken,listLables),然后一个接一个地调用它们,如下所示:

 function printLabels() { secret = getClientSecret auth = getAuthorization(secret) token = getToken(auth) labels = getLabels(auth) print labels } 

为了获得所有的主题,我会采取类似的方式:

 function printThreads() { secret = getClientSecret auth = getAuthorization(secret) token = getToken(auth) threads = getThreads(auth) print threads } 

现在我试图以asynchronous的方式做到这一点,我只是无法用简单而优雅的方式来包装我的头。

我想重新使用总是相同的代码,并使用结果(auth对象)进行各种查询(线程,标签…)。

任何人都可以指点我一个很好的资源,这将帮助我了解如何去做这个?

当你asynchronous工作,也就是说,你不需要等待一个结果,你需要使用一个promise,也就是你期望从你的代码中得到的东西。 承诺先待,然后履行或拒绝。 一个promise需要一个callback函数,也就是在asynchronous任务完成时执行的一个函数。

当你计划一个asynchronous的工作stream程时,你需要问自己以下问题:

  • 应如何触发asynchronous任务? (事件)
  • 在任务被触发之后,在任务开始之前应该发生什么? (初始化)
  • 应该是什么任务? (目的)
  • 应该传递什么? (规范)
  • 应该收到什么? (响应)
  • 任务完成后应该发生什么? (终结)

这些问题可以帮助您了解asynchronous请求的生命周期。 callback是在定稿阶段执行的function。 你的callback函数可以调用任何函数,你只需要在callback函数内完成任务之后,而不是在函数调用之后。