Bob-it
Bob-it

Reputation: 99

Passing parameters to a promise

I am trying to write a promise in such a way that I can pass some parameters. Inside, this promise will call a Fetch. This is the code I wrote so far:

const myFunction = (parA, parB, parC) => {
    return new Promise ((resolve, reject) => {
        url = ... // calculated based on the parameters passed above;
        fetch(url)
        .then(response => {
            var object = response.json();
            resolve(object);// the idea is that 'object' is returned by the outmost promise
            console.log('Check');// So far OK, this is correctly printed to the console
        })
        .catch(err => {
            console.log('Error: ' + err);
            reject(err);
        });
//      resolve('1') // Used for test only. With this, everything works, but "object" here is undefined -- I guess it gets executed too early, before the completion of the Fetch
    });

and this is where the promise is called

    myFunction(a, b, c).then(res => {
        console.log('OK');// just testing 
        console.log(res);// just testing 
    });

What happens is that the Fetch resolves OK, but my overall promise doesn't. The last two console.log instructions are never executed.

In short, my problem is: how can I resolve my promise returning the result from the Fetch? It's a promise inside a promise, I guess I could chain them with .then, but I also want to be able to pass parameters.

I also guess I could rewrite the code avoiding this promise chaining, but since I'm also doing it as a way of learning, I prefer to try to figure out first how to solve this problem with this structure.

p.s.: at the moment I am stuck with the promises, cannot use async/await because I am with an old version of node.js and cannot update it

Upvotes: 0

Views: 1002

Answers (1)

Benjamin Eckardt
Benjamin Eckardt

Reputation: 728

As @VLAZ already mentioned, it's not necessary to create your own promise here, since fetch() itself already returns a promise. Therefore, you could try this:

const myFunction = (parA, parB, parC) => {
    const url = ... // calculated based on the parameters passed above;
    return fetch(url)
        .then(response => response.json())
        .then(object => {
            console.log('Check', object);
            return object;
        })
        .catch(err => {
            console.log('Error: ' + err);
        });
};

Upvotes: 1

Related Questions