mdn: https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API
## 優先順位付けされたタスクのスケジューリング
Prioritized Task Scheduling API は Window と Worker の両方のスレッドで利用可能であり、[[JavaScript グローバルオブジェクト|グローバルオブジェクト]] のプロパティとして `scheduler` で利用できる。
主要な API メソッドは [[WebAPI scheduler.postTask|scheduler.postTask]] であり、コールバック関数を引数にとって、その関数から返される値と発生したエラーを履行値・拒否理由とする [[JavaScriptのPromiseオブジェクト MOC|Promise]] を返す。
最もシンプルな API の使用形式は以下のようにする。これによってデフォルトの優先順位 `user-visible` を持つタスクが生成される。
```js
const promise = scheduler.postTask(myTask);
// myTaskはcallback
```
つまり、[[JavaScript 非同期処理のキュー|タスク]] と [[JavaScript 非同期処理のキュー|マイクロタスク]] の両方の機構を使った [[JavaScript 非同期APIとは|非同期API]] であり、スケジューラーであると言える。考え方としては古いタスクベースの非同期 API を [[JavaScriptのPromiseオブジェクト MOC|Promise]] でラップする [[12-epasync-wrapping-macrotask|Promisification]] と同じ。ただし、利用するタスク (コールバック関数) には優先順位をつけることが可能となっている。
メソッドから Promise オブジェクトが返されるということは、[[JavaScript Promise.prototype.then|then]] や [[JavaScript Promise.prototype.catch|catch]] を使って非同期に履行値や拒否理由を評価することができる。
```js
scheduler
.postTask(() => "task executing")
.then((result) => console.log(result))
.catch((err) => cosnole.error(err));
```
同様に [[JavaScript Async Await MOC|async/await]] を使ってタスクの完了を待つことができる。
```js
(async () => {
try {
const result = await scheduler.postTask(() => "task executing");
cosnole.log(result)+
} catch (err) {
cosnole.error(err);
}
})();
```