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

时间:2016-02-06 13:02:15

标签: javascript node.js asynchronous

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

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

我想将我的MEAN应用程序的gmail API作为模块使用。我已将快速启动代码放入模型中,并且我可以将我的Gmail帐户的标签打印到控制台。

现在我想a)返回数组(标签,消息,...)而不是仅仅打印它们; b)为不同的用例重用应用程序的部分(例如,身份验证,......)

快速入门文件的结构如下:

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

在同步世界中,我要做的是创建所有这些函数(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
}

现在我正在尝试以异步方式执行此操作,而我无法以简单而优雅的方式解决如何执行此操作的问题。

我想重复使用始终相同的代码,并使用结果(auth对象)进行各种查询(线程,标签......)。

有人能指出一个很好的资源,可以帮助我理解如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

当您异步工作时,也就是说,您不等待结果,您需要使用一个承诺,即您希望从代码中获得的承诺。承诺先挂起,然后履行或拒绝。 promise需要一个回调函数,即在异步任务完成时执行的函数。

当您计划异步工作流程时,您需要问自己以下问题:

  • 如何触发异步任务? (事件)
  • 在触发任务后但在任务开始之前应该发生什么? (初始化)
  • 应该是什么任务? (目的)
  • 应该通过什么? (规格)
  • 应该收到什么? (响应)
  • 任务完成后会发生什么? (终结)

这些问题可帮助您了解异步请求的生命周期。回调是在完成阶段执行的功能。你的回调可以调用任何函数,你只需要在回调内的任务之后做一些事情,而不是在函数调用之后。

答案 1 :(得分:0)