因此,我正在尝试通过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);
问题是我既没有退还承诺,也没有解决未兑现的承诺。这是固定代码(有效!)
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] 删除。
我来说两句