Node和异步api调用中的Bluebird.js

查理·G

因此,我正在尝试通过Facebook集成(使用facebook-node-sdk构建我的第一个Web应用程序我让它对api进行了简单的调用,但是现在是时候将其全部放在一个简单的服务器中,并根据请求进行调用了(这不是webapp本身,而是更多的API服务器)。

我遇到的问题是,即使我(大概)已经使用bluebird来实现Facebook sdk和我的makeCall方法,我仍然会打印“ hi”,然后“ undefined”-console.log在makeCall可以调用之前被调用返回任何东西。

这是我的app.js

var Promise = require('bluebird')
    , http = require('http')
    , Facebook = Promise.promisifyAll(require('facebook-node-sdk'))
    , config = require('./config')
    , fb = new Facebook({ appId: config.fb.api, secret: config.fb.secret });

var makeCall = new Promise.method(function (username) {
    return fb.api(username, function(err, data) {
        console.log('hi')
        if (err) return err;

        return data;
    });
});

http.createServer( function (req, res) {
    makeCall('/me').then(console.log)
}).listen(8001);
查理·G

问题是我既没有退还承诺,也没有解决未兑现的承诺。这是固定代码(有效!)

var Promise = require('bluebird')
    , http = require('http')
    , Facebook = Promise.promisifyAll(require('facebook-node-sdk'))
    , config = require('./config')
    , fb = new Facebook({ appId: config.fb.api, secret: config.fb.secret });

var makeCall = new Promise.method(function (username) {
    return new Promise(function (resolve) {
        // resolve
        console.log('resolve')
        fb.api(username, function(err, data) {
            console.log('err: ' + err)
            console.log('data: ' + data)
            if (err) reject(err);

            resolve(data);
        });
    });
});

http.createServer( function (req, res) {
    makeCall('/me').then(function (data) {
        console.log(data)
    })
}).listen(8001);

输出如下所示:

resolve
err: null
data: [object Object]
{ id: ... }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

API调用的异步并行与node.js中的回调

来自分类Dev

在node.js中迭代大量异步调用/结果(使用ES6 / async / bluebird / generators)?

来自分类Dev

递归,Node js和异步调用

来自分类Dev

在Node.js中使用Redis和Bluebird使用异步等待

来自分类Dev

Node.js的异步调用和递归

来自分类Dev

AngularJS和Node.js的异步调用

来自分类Dev

带有Express异步API调用的Node.JS

来自分类Dev

Sequelize JS / Bluebird:从异步并行DB调用开始

来自分类Dev

正确的过程以在Node.js中调用多个异步函数

来自分类Dev

正确的过程以在node.js中调用多个异步函数

来自分类Dev

链接异步函数Node.js bluebird mongoskin

来自分类Dev

Node.js | Bluebird Promise 不会异步执行任务

来自分类Dev

在 node.js 中调用restful api

来自分类Dev

如何使用Node.js,Express.js和Bluebird调用第二个“外部”函数

来自分类Dev

Node.js中的异步和Q Promise

来自分类Dev

在Node.js中异步foreach和猫鼬

来自分类Dev

如何在Node.js中调用需要用户名和密码的API

来自分类Dev

Node.js-异步方法调用问题

来自分类Dev

回送异步数据调用Node.js

来自分类Dev

Node.js杀死异步调用

来自分类Dev

Node.js /使Redis异步调用

来自分类Dev

node.js redis 异步调用

来自分类Dev

使用sequelize对MySQL的Node.js和异步调用阻止了其他用户

来自分类Dev

如何在Node.js中使用异步瀑布进行API调用

来自分类Dev

Node.js如何进行api调用异步读取文件

来自分类Dev

MongoDB和Node js异步编程

来自分类Dev

Node.js和异步错误

来自分类Dev

Node.js异步mapLimit和内存

来自分类Dev

异步和等待功能Node.js