How to use async await function object in Javascri

2019-01-26 10:13发布

问题:

Say I have a function object-

setObj : function(a,b){
    obj.a = a;
    obj.b = b;
}

If I have to use async & await on this function object, how do I do it?

If the same was written in function (function way), say-

async function setObj(a,b){
    obj.a = a;
    obj.b = b;
}

await setObj(2,3);

This works fine. But, how do I do it in case of function object?

回答1:

If I understand your question correctly, you can just use the async keyword in front of the method declaration:

let obj = {};
let myObj = {
    async setObj(a,b) {
        obj.a = a;
        obj.b = b;
    }
}

See http://tc39.github.io/ecmascript-asyncawait/#async-methods

UPDATE

You cannot use await outside of an async function. In order to use this you have to wrap that call to await setObj(2, 3):

async function consoleLog() {
    await myObj.setObj(2, 3);
    console.log(obj.a + obj.b);
}

consoleLog();


回答2:

Use the same async keyword in your object's property:

(async function () {
  var obj = {};
  console.log("hello");

  let setObj = async function (a,b){
    obj.a = a;
    obj.b = b;
  };

  await setObj(2,3);

  console.log(obj.a+obj.b);
})();

Note that the entire code is wrapped in an asynchronous self-invoking function. This is needed, otherwise the await setObj will not be able to run correctly.



回答3:

You can simply put the async keyword on any function, not only function declarations but also function expressions and methods of object. For example:

As an method of an object:

const Object = {
    async asyncFunction() {
        await MyExamplepromise
    }
}

As a variable:

const myFunc = async function () { await MyExamplepromise }

// this is how execute the function expression
// first () operator to execute, and use .then get access the resolved value
myFunc().then((val) => { console.log(val) })

Also notice that an async function returns a promise which will be resolved with the value returned by the async function, or rejected with an uncaught exception thrown from within the async function.



回答4:

using arrow functions work as well

const myObject = {
   myFunc: async () => {
     await myResultHere
   }
}

using this: Since the function is an async function, it will run asynchronously. If you want to run this with await, you will have to use it inside an async function

const useFunc = async () => {
   const res = await myObject.myfunc();
}