web-dev-qa-db-ja.com

Javascriptで非同期待機関数オブジェクトを使用するにはどうすればよいですか?

関数オブジェクトがあるとしましょう-

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

この関数オブジェクトでasync&awaitを使用する必要がある場合、どうすればよいですか?

同じことが関数(関数の方法)で書かれている場合、たとえば-

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

await setObj(2,3);

これは正常に機能します。しかし、関数オブジェクトの場合はどうすればよいですか?

10
bozzmob

私があなたの質問を正しく理解している場合は、メソッド宣言の前に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();
_
14
Ben March

オブジェクトのプロパティで同じ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は正しく実行できなくなります。

7
Hans

asyncキーワードは、関数宣言だけでなく、関数式やオブジェクトのメソッドなど、任意の関数に簡単に配置できます。例えば:

オブジェクトのメソッドとして:

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

変数として:

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

また、async関数がpromiseを返すことにも注意してください。これは、async関数によって返される値で解決されるか、async関数内からスローされたキャッチされない例外で拒否されます。

0

矢印関数の使用も同様に機能します

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

これを使用する:関数は非同期関数であるため、非同期で実行されます。これをawaitで実行したい場合は、非同期関数内で使用する必要があります

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