👌
コンストラクタの外からresolve/rejectを呼ぶPromsieテク
Promsie を作って返す関数で、Promise コンストラクタの引数のコールバックではないところで resolve
とか reject
とかしたいことがある。
こんな感じで、外部に変数を作って普通に代入して外から resolve/reject を呼べるテクがある。
function registerSomething() {
let resolve, reject;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
something.registerSomething((error, info) => {
if (error) reject(error);
resolve(info);
})
return promise;
}
まあ実際には、上記コードくらいだったら普通にコンストラクタの中でやってよさそうだけど。
行儀悪い感じだし、できればやりたくはない感じがある。ということで、現在 TC39 では Promise with resolvers というプロポーザルが提案されている。
const { promise, resolve, reject } = Promise.withResolvers();
みたいな感じらしい。たまに便利そう。
Discussion