【问题标题】:Using Promises / Node使用承诺/节点
【发布时间】:2016-05-17 16:08:01
【问题描述】:

我正在尝试寻找在我的 Node 应用程序中使用 Promise 的方式/最佳方式。
老实说,我不是 100% 理解承诺,但通过更多的练习,我会变得更好。

我目前要做的是在有人登录后:

  1. 获取 Facebook 访问令牌
  2. 访问用户配置文件,更新 Mongodb 中的用户文档或创建新的用户文档(如果它们不存在)
  3. 访问 facebook 好友列表并交叉引用 Mongodb 中的“好友”文档。

我遇到的问题是第 3 点,我需要第 1 点的访问令牌和第 2 点中现有或新创建的用户文档传递到第三个函数。

我的函数链如下所示:

getAccessToken(req)
.then(function(accessToken){
 getUserProfile(req, accessToken)
 .then(findUser.bind(null, req, res))
  .then(...)
 });

getAccessToken 从 Facebook 返回“accessToken”。 getUserProfile 从 Facebook 返回用户。 findUser 在 Mongodb 中查找现有用户文档或创建新用户文档。

我如何返回现有的或新创建的用户对象并以promise的形式将其与accessToken结合起来传递?

【问题讨论】:

    标签: javascript node.js facebook mongodb facebook-graph-api


    【解决方案1】:

    你可以嵌套promise:

    getAccessToken(req)
    .then(function(accessToken) {
      return getUserProfile(req, accessToken)
      .then(findUser.bind(null, req, res))
      .then(function(user) {
        // use accessToken & user
      })
    });
    

    或将解析后的值存储在外部范围内:

    var _accessToken;
    getAccessToken(req)
    .then(function(accessToken) {
      _accessToken = accessToken;
      return getUserProfile(req, accessToken);
    })
    .then(findUser.bind(null, req, res))
    .then(function(user) {
        // use _accessToken & user
    });
    

    记住总是返回嵌套的promise。

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 1970-01-01
      • 2021-12-23
      • 2018-09-26
      • 1970-01-01
      • 2021-08-21
      • 2017-05-08
      • 2014-03-23
      • 2018-12-09
      相关资源
      最近更新 更多