使用Promises / Node

时间:2016-02-08 03:57:15

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

我试图在我的Node应用程序中找到一种使用promises的方式/最佳方式 我说实话,我不会100%理解承诺,但我通过更多的练习会变得更好。

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

  1. 获取Facebook访问令牌
  2. 访问用户个人资料,更新Mongodb中的用户文档或创建新用户文档(如果他们不存在)
  3. 访问Facebook好友列表并交叉引用一个"朋友" Mongodb中的文档。
  4. 我遇到的问题是要做第3点,我需要来自第1点的访问令牌以及在第2点中现有或新创建的用户文档传递到第三个函数。

    我的功能链如下:

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

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

    如何返回现有的或新创建的用户对象,并以promise的形式将其传递给accessToken?

1 个答案:

答案 0 :(得分:1)

你可以嵌套承诺:

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
});

请记住始终返回嵌套的承诺。

相关问题