请求承诺不返回值(Node JS)

时间:2018-08-06 14:53:46

标签: javascript node.js promise request

我一直在尝试使它工作一段时间,我的请求承诺没有返回找到的拖缆。当我在请求的.then部分内部console.log(streamer)时,它起作用。有什么想法吗?

function getStreamerByName(name){
var streamer;
var options = {  
    url: "https://api.twitch.tv/helix/users?login=" + name,
    method: 'GET',
    headers: {
        'Client-ID': 'CLIENT_ID',
    }
};
requestP(options)
//SPREAD
    .spread(function(res, body) {
        streamer_data = JSON.parse(body);
    })
//THEN
    .then(function (body) {
        streamer = ({
            twitch_id: streamer_data["data"][0]["id"],
            name: streamer_data["data"][0]["display_name"],
            image: streamer_data["data"][0]["profile_image_url"],
            description: streamer_data["data"][0]["description"]
        });
        Streamer.create(streamer);
        return streamer;
    })
//CATCH
    .catch(function (err) {
        console.log(err);
        return streamer;
    });
}

3 个答案:

答案 0 :(得分:2)

您需要返回承诺链:

function getStreamerByName(name){
var streamer;
var options = {  
    url: "https://api.twitch.tv/helix/users?login=" + name,
    method: 'GET',
    headers: {
        'Client-ID': 'CLIENT_ID',
    }
};
//A return was added here
return requestP(options)
//SPREAD
    .spread(function(res, body) {
        streamer_data = JSON.parse(body);
    })
//THEN
    .then(function (body) {
        streamer = ({
            twitch_id: streamer_data["data"][0]["id"],
            name: streamer_data["data"][0]["display_name"],
            image: streamer_data["data"][0]["profile_image_url"],
            description: streamer_data["data"][0]["description"]
        });
        Streamer.create(streamer);
        return streamer;
    })
//CATCH
    .catch(function (err) {
        console.log(err);
        return streamer;
    });
}

在外部使用所有这些函数时,还需要使用.then()以获得结果或使用异步函数并等待。

如此

async caller() {
   var value = await getStreamerByName('stuff')
}

caller() {
    getStreamerByName('stuff').then((result) => { //do stuff })
}

答案 1 :(得分:0)

我不确定这是否是您的意思,但我只是尝试了一下,但仍无法使拖缆保持静止,它出现了一条错误消息: TypeError:无法读取未定义的属性“ then”

function getStreamers() {
            getStreamerByName(search).then((streamer) => {
                console.log(streamer)
            })
        }
getStreamers();

答案 2 :(得分:0)

async function getStreamerByName (name) {
    return new Promise(function (resolve, reject) {
        Your code
   });
}

Var myStreamer = getStreamerByName ('myStreamer');
相关问题