web-dev-qa-db-ja.com

JavaScriptのクラスを持つ非同期関数

Nodejsでクラスを作成しました

class ApnService {
  sendNotification(deviceType, deviceToken, msg, type, id) {
    try {
      const note = await apnProvider.send(note, deviceToken)
      console.log(note)
    } catch (err) {
      console.log(err)
    }
  }
}

export default ApnService

上記の関数をasyncに変換する必要があります。しかし、以下の構文を使用すると、エラーがスローされます

SyntaxError: src/services/apn.js: Unexpected token (43:19)
  41 |   }
  42 | 
> 43 |   sendNotification = async(deviceType, deviceToken, msg, type, id) => {
     | 

               ^

以下は構文です

class ApnService {
  sendNotification = async(deviceType, deviceToken, msg, type, id) => {
    try {
      const note = await apnProvider.send(note, deviceToken)
      console.log(note)
    } catch (err) {
      console.log(err)
    }
  }
}

export default ApnService
6
Dark Knight

関数名の前にasyncを追加するだけで、その関数を非同期として宣言できます。

class ApnService {
  async sendNotification(deviceType, deviceToken, msg, type, id) {
    try {
      const note = await apnProvider.send(note, deviceToken)
      console.log(note)
    } catch (err) {
      console.log(err)
    }
  }
}

export default ApnService
3
Aniket Pawar

asyncは、非同期関数を指定するためのキーワードです。

class ApnService {
    async sendNotification(deviceType, deviceToken, msg, type, id) { 
        try { 
            const note = await apnProvider.send(note, deviceToken) 
            console.log(note) 
        } catch (err) { 
            console.log(err) 
        } 
    }
 }
export default ApnService;
2
Drew Reese
class Foo {
    x = something
}

この割り当ては、クラスフィールドの例です。 クラスプロパティ/クラスフィールド 構文の使用は現在TC39プロセスのステージ3にあります。つまり、ECMAScriptではまだ使用されておらず、すべてのJSエンジンでネイティブにサポートされていません。 Babel のようなトランスパイラーを介して使用できますが、そのようなトランスパイラーを自分で構成して実行する場合のみです。

幸いにも、クラスメソッドを非同期にするためにクラスフィールド構文は必要ありません。asyncキーワードを使用するだけで済みます。

class Foo {
    async myMethod () {/* ... */}
}
1
Gabriel L.