如何从节点中的api promise返回对象
How to return object from api promise in node
我试图理解promise是如何工作的,但显然缺少了一些东西。
在节点中,我有一个搜索功能,它使用Twit模块返回Twitter结果,然后我想对结果做点什么:
var twitter = require('../server/twit');
exports.getTwitSearchResult = function(query, cb) {
var t = twitter.searchTwitter(query)
// do something with variable 't'
// var tweet = t.data.statuses
// ...
// ...
cb(null, tweet);
};
'../server/twit'
:的twitter功能
var Twit = require('twit')
var bot = new Twit(config);
exports.searchTwitter = function(query){
var tsearch = function(query, callback){
return bot.get('search/tweets', {
q: query
, since: '2016-02-01'
, result_type: 'popular'
, count: 1
}, function(err, data, response){
callback(data)
});
};
tsearch(query, function(callback){
return callback
})
};
问题是"t"总是以undefined
或[object Promise]
的形式返回。我已经尝试了几种使用promise和callback编写函数的不同方法,大致如下:
var twitter = require('../server/twit');
exports.getTwitSearchResult = function(query, cb) {
var t = function(query, callback){
return twitter.searchTwitter(query)
.then(function(tweet){
callback(tweet)
})
}
// do something with variable 't'
// var tweet = t.data.statuses
// ...
// ...
cb(null, tweet);
};
但后来我得到了TypeError: Cannot read property 'then' of undefined
我该如何写得更好,以便使用Twit承诺返回的结果?
您的变量t将始终未定义,因为函数是异步的,不返回任何内容。您需要使用回调。
为了你的/服务器/twit文件:
var Twit = require('twit')
var bot = new Twit(config);
exports.searchTwitter = function(query, callback){
bot.get('search/tweets', {
q: query
, since: '2016-02-01'
, result_type: 'popular'
, count: 1
}, callback);
};
主文件:
var twitter = require('../server/twit');
exports.getTwitSearchResult = function(query, cb) {
twitter.searchTwitter(query, function(err, data, response) {
// do something with variable 'data'
// var tweet = data.statuses
// ...
// ...
cb(null, tweet);
});
};
如果你想使用promise,你应该切换到使用模块twit-promise
,并将你的代码更改为:
var Twit = require('twit-promise')
var bot = new Twit(config)
exports.searchTwitter = function(query){
return bot.get('search/tweets', {
q: query
, since: '2016-02-01'
, result_type: 'popular'
, count: 1
});
};
var twitter = require('../server/twit');
exports.getTwitSearchResult = function(query, cb) {
twitter.searchTwitter(query)
.then(function(result) {
// do something with variable 'result'
// var tweet = result.data.statuses
// ...
// ...
cb(null, tweet);
})
.catch(function(err) {
cb(err);
});
};
相关文章:
- 如何更改bigquery API中的计费层选项
- 使用promise和mongoose对文档进行排序
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- 使用Facebook live API创建实时视频对象时的隐私设置
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- Jquery - Using promise API
- Angular promise从JSON API返回不正确的数据
- 如何从节点中的api promise返回对象
- 使用 Javascript Promise 调用多个 WEB API 调用
- JavaScript Promise API 是否比它需要的更复杂
- Promise deferred ajax api jQuery
- 使用api调用在循环中实现promise
- 组合多个API调用和处理后从工厂方法返回promise
- 量角器测试中的request-promise + co API触发器
- 链接2个异步调用(promise API)以串行运行
- Promise API -结合2个异步调用的结果
- 如何以同步方式制作Promise API
- 使用Request -promise限制Node.js API的请求