gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:11:12 24 4
gpt4 key购买 nike

所以我正在尝试构建我的第一个 webapp 与 Facebook 集成(使用 facebook-node-sdk )。我让它对 api 进行简单的调用,但现在是时候将所有这些都放在一个简单的服务器中并根据请求进行调用(这不会是 webapp 本身,而是更多的 API 服务器)。

我遇到的问题是,即使我(大概)使用了 bluebird promise 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);

最佳答案

new Promise.method 在这里(或任何地方,因为它是一个函数而不是构造函数)没有意义,makeCall 也没有意义。

试试这个:

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

Promise.promisifyAll(Facebook.prototype);

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

不要在 promisifyAll 为你做的时候创建包装器 :)

关于javascript - Node 中的 Bluebird.js 和异步 api 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21207714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com