Lewis Clark
Lewis Clark

Reputation: 56

Request Promise not returning a value (Node JS)

I have been trying to get this to work for while now, my request promise is not returning the streamer it has found. When i console.log(streamer) inside of the .then part of the request it works. Any ideas?

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;
    });
}

Upvotes: 2

Views: 2039

Answers (3)

NotoriousPyro
NotoriousPyro

Reputation: 647

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

Var myStreamer = getStreamerByName ('myStreamer');

Upvotes: 0

Lewis Clark
Lewis Clark

Reputation: 56

I'm not sure if this is what you mean but i just tried this and its not getting the streamer still, its coming up with an error message saying: TypeError: Cannot read property 'then' of undefined

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

Upvotes: 0

Eric Yang
Eric Yang

Reputation: 2750

You need to return the promise chain:

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;
    });
}

When you all this function externally, you'll also need to use a .then() to get the result or use an async function and await.

so

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

or

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

Upvotes: 3

Related Questions