【问题标题】:How do I transport this code from sync to async (nodejs)?如何将此代码从同步传输到异步(nodejs)?
【发布时间】:2016-02-06 21:46:30
【问题描述】:

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

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

我想将部分 gmail API 作为模块提供给我的 MEAN 应用。我已将快速入门代码放入模型中,并且可以将我的 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 对象)用于各种查询(线程、标签等)。

谁能给我指出一个很好的资源来帮助我理解如何去做?

【问题讨论】:

    标签: javascript node.js asynchronous


    【解决方案1】:

    当您以异步方式工作时,即您不等待结果,您需要使用 Promise,即您对代码的期望。一个承诺首先是待处理的,然后它被履行或拒绝。 Promise 需要回调,即异步任务完成时将执行的函数。

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

    • 应该如何触发异步任务? (事件)
    • 在任务被触发之后,但在任务开始之前应该发生什么? (初始化)
    • 任务应该是什么? (目的)
    • 应该传递什么? (规范)
    • 应该收到什么? (回应)
    • 任务完成后会发生什么? (最终确定)

    这些问题有助于您了解异步请求的生命周期。回调是在完成阶段执行的函数。您的回调可以调用任何函数,您只需要在回调内部的任务之后执行预期的操作,而不是在函数调用之后。

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        • 2013-08-01
        • 2018-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        相关资源
        最近更新 更多