How do I wait for a promise to finish before returning the variable of a function? How do I wait for a promise to finish before returning the variable of a function? javascript javascript

How do I wait for a promise to finish before returning the variable of a function?


Instead of returning a resultsArray you return a promise for a results array and then then that on the call site - this has the added benefit of the caller knowing the function is performing asynchronous I/O. Coding concurrency in JavaScript is based on that - you might want to read this question to get a broader idea:

function resultsByName(name){       var Card = Parse.Object.extend("Card");    var query = new Parse.Query(Card);    query.equalTo("name", name.toString());    var resultsArray = [];    return query.find({});                           }// laterresultsByName("Some Name").then(function(results){    // access results here by chaining to the returned promise});

You can see more examples of using parse promises with queries in Parse's own blog post about it.


What do I need to do to make this function wait for the result of the promise?

Use async/await (NOT Part of ECMA6, but available for Chrome, Edge, Firefox and Safari since end of 2017, see canIuse)
MDN

    async function waitForPromise() {        // let result = await any Promise, like:        let result = await Promise.resolve('this is a sample promise');    }

Added due to comment:An async function always returns a Promise, and in TypeScript it would look like:

    async function waitForPromise(): Promise<string> {        // let result = await any Promise, like:        let result = await Promise.resolve('this is a sample promise');    }


You're not actually using promises here. Parse lets you use callbacks or promises; your choice.

To use promises, do the following:

query.find().then(function() {    console.log("success!");}, function() {    console.log("error");});

Now, to execute stuff after the promise is complete, you can just execute it inside the promise callback inside the then() call. So far this would be exactly the same as regular callbacks.

To actually make good use of promises is when you chain them, like this:

query.find().then(function() {    console.log("success!");    return new Parse.Query(Obj).get("sOmE_oBjEcT");}, function() {    console.log("error");}).then(function() {    console.log("success on second callback!");}, function() {    console.log("error on second callback");});