我有从ID中获取Twitter内容的承诺
function get_twit_content(twit_id){
return new Promise(function(resolve){
twitter_client.get('statuses/show/', {id: twit_id, tweet_mode : 'extended'}, function(error, tweet, response) {
var twit_content;
if (error){
console.log(error);
twit_content = false;
}
twit_content = tweet.full_text;
return twit_content;
});
// resolve the promise with some value
setTimeout(function() {
resolve(twit_id);
}, 1000);
})
}
var twit_content = get_twit_content(twit_id);
twit_content.then(function(twit_content){
console.log(twit_content);}
这给了我twit_id而不是我想要的twit_content
答案 0 :(得分:1)
您的承诺将以您在resolve()
中的任何东西解决。您在回调中拥有的返回仅从回调中返回,没有任何效果。不用创建超时(非常错误的方法),只需将resolve(twit_content)
放在回调中即可。
function get_twit_content(twit_id){
return new Promise(function(resolve){
twitter_client.get('statuses/show/', {id: twit_id, tweet_mode : 'extended'}, function(error, tweet, response) {
var twit_content;
if (error){
console.log(error);
twit_content = false;
}
twit_content = tweet.full_text;
resolve(twit_content);
});
})
}
get_twit_content(123).then(twit_content => console.log(twit_content));
答案 1 :(得分:0)
您必须使用Promise
为resolve()
设置返回值,如果要将twit_content设置为返回值,则必须调用resolve(twit_content)
答案 2 :(得分:0)
twitter
客户端已经返回了Promise
,您无需自己创建一个。
function get_twit_content(twit_id) {
return twitter_client.get('statuses/show', {id: twit_id, tweet_mode: 'extended'})
.then(function (tweet) {
return tweet.full_text;
});
}
答案 3 :(得分:0)
function get_twit_content(twit_id){
return new Promise(function(resolve, reject){
twitter_client.get('statuses/show/', {id: twit_id, tweet_mode : 'extended'},
function(error, tweet, response) {
if (error){
console.error("Error Fetching Twitter...")
reject(error) //or throw error
}
twit_content = tweet.full_text;
resolve(twit_content);
});
})
get_twit_content
.then( response => console.log("Data Fetched", response))
.catch( error => console.log("Check network and try again...")