如何在Javascript中使用异步等待函数对象?

时间:2015-12-10 20:08:16

标签: javascript async-await babeljs ecmascript-next

说我有一个功能对象 -

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

如果我必须使用async&等待这个函数对象,我该怎么做?

如果在功能(功能方式)中写入相同内容,请说 -

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

await setObj(2,3);

这很好用。但是,如果是函数对象,我该怎么办呢?

3 个答案:

答案 0 :(得分:11)

如果我理解你的问题,你可以在方法声明前面使用async关键字:

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

请参阅http://tc39.github.io/ecmascript-asyncawait/#async-methods

<强>更新

您不能在异步功能之外使用await。为了使用它,您必须将该调用包装到await setObj(2, 3)

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

consoleLog();

答案 1 :(得分:7)

在对象的属性中使用相同的async关键字:

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

请注意,整个代码都包含在异步自调用函数中。这是必需的,否则await setObj将无法正常运行。

答案 2 :(得分:0)

使用箭头功能也可以

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

使用此方法:由于该函数是异步函数,因此它将异步运行。如果要在等待状态下运行它,则必须在异步函数中使用它

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