Node Promise返回输入参数而不是我的返回值

时间:2018-07-09 20:44:22

标签: node.js

我有从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

4 个答案:

答案 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)

您必须使用Promiseresolve()设置返回值,如果要将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...")