Javascript Promise に関する興味深い事実

Susan Sarandon
リリース: 2024-10-07 20:21:30
オリジナル
187 人が閲覧しました

fun facts about Javascript Promises

Promise は常に非同期です

Promise のコールバックは常に同期コードの後に​​実行されます


const promise = Promise.resolve(); 
promise.then(() => console.log('async')); 
console.log('sync');

//sync
//async


ログイン後にコピー

連鎖したプロミスは新しいプロミスを返す

Promise は呼び出されるたびに新しい Promise を返します


const p = Promise.resolve(); 
const chain = p.then(() => {}); 
console.log(p === chain); //false


ログイン後にコピー

それなら永遠に()

無限連鎖

のサポートを約束します

Promise.resolve(1) 
    .then(value => value + 1) 
    .then(value => value + 1) 
    .then(value => console.log(value)); // 3


ログイン後にコピー

コールバックをプロミスに変換できます

最新の async/await で動作するようにコールバックを使用する古いコードをラップできます


function asyncOperation(callback) { 
    setTimeout(() => callback(null, 'Im a callback'), 1000); 
} 

const promisified = () => new Promise((resolve, reject) => { 
    asyncOperation((err, result) => { 
        if (err) reject(err); 
        else resolve(result); 
    }); 
});

promisified().then(result => console.log(result)); // "Im a callback"


ログイン後にコピー

Promise.resolve() は常に新しい Promise を作成するとは限りません

非 Promise 値を渡すと、Promise.resolve() はそれを解決された Promise にラップします。ただし、Promise を渡すと、同じ Promise が返されるだけです


const p1 = Promise.resolve('Hello'); 
const p2 = Promise.resolve(p1); 
console.log(p1 === p2); // true


ログイン後にコピー

チェーン内のどこでもエラーを処理できます


Promise.reject('Error!')
  .then(() => console.log('This will not run'))
  .then(() => console.log('This will also not run'))
  .catch(err => console.log('Caught:', err))
  .then(() => console.log('This will run'));


ログイン後にコピー

finally() は値を渡しません

finally() メソッドは、解決された値を受け取ったり変更したりしません。これはリソースをクリーンアップするために使用され、Promise が解決されるか拒否されるかに関係なく実行されます。


Promise.resolve('resolved')
  .then(value => console.log(value))
  .finally(() => console.log('Cleanup'))

//resolved
//cleanup


ログイン後にコピー

約束は一度決められると変更できません

Promise が解決されると (解決または拒否されると)、その状態は不変になります。それ以降は、再度解決/拒否を試みても変更できません。


const p = new Promise((resolve, reject) => {
  resolve('First');
  resolve('Second');
});
p.then(value => console.log(value));  //"First" (only the first value is used)


ログイン後にコピー

catch() を連鎖させて特定のエラーを処理できます


Promise.reject('type C error')
  .catch(err => {
    if (err === 'type A error') console.log('handle type A');
    throw err;
  })
  .catch(err => {
    if (err === 'type B error') console.log('handle type B');
    throw err;
  })
  .catch(err => {
    if (err === 'type C error') console.log('handle type C');
    throw err;
  })


ログイン後にコピー

await は非約束値でも使用できます


async function demo() {
  const result = await 42; //not a promise
  console.log(result);      
}
demo(); //42


ログイン後にコピー

それだけです!ここまで読んでいただきありがとうございました。次回まで!

以上がJavascript Promise に関する興味深い事実の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート