在NodeJS中使用蓝鸟承诺的链函数

时间:2017-01-20 15:43:20

标签: javascript node.js promise bluebird

我很抱歉再问一个Promise的问题,我无法理解它,在阅读了大量关于这里的问题和解释之后,我仍然在努力。

所以在我的nodejs项目中,我正在尝试做三件事。

1)从Facebook API获取用户信息

graph.get(message.user, function getUserInfo(err, res) {
     console.log(res)
}

2)从其他API获取用户列表

request.get('https://api-url/api/users', {
        'auth': {
            'bearer': 'bearerAuth'
        }
    })

3)检查Facebook用户的姓名是否与我从API中获取的JSON数据中的名称相匹配,然后将其交给用户。

let aPieceOfData = "";

Bluebird.promisifyAll(graph.get(message.user))
    .then(function(res) {
        // this should give me the response from the Facebook API which is the user
        // Then pass the response to the next .then(function(){})
    })
    .then(function(res) {
       request.get('https://api-url/api/users', {
         'auth': {
           'bearer': 'bearerAuth'
         }
         const apiData = JSON.parse(response.body);
         for (i in apiData) {
          if (res.username == apiData[i].username) {
            // if the username matches the user name then save some data to a variable outside this scope so I can access it
            aPieceOfData = apiData[i].item;
          }
         }
       })
    })
    .catch(function(err) {
        console.log(err, "<<<<<<<");
    })

格式化可能有点偏差。但我很难理解promises如何工作以及如何在链接函数之间传递数据而不是在最后将数据保存在我的函数之外,以便我可以使用它。

有人可以提供一些解释和/或一些初学者友好解释的链接。

1 个答案:

答案 0 :(得分:1)

基于示例from the doc

registration_id

我相信它应该是这样的:

var fs = Promise.promisifyAll(require("fs"));

fs.readFileAsync("myfile.js", "utf8").then(function(contents) {
    console.log(contents); }).catch(function(e) {
    console.error(e.stack); });