ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript Promise に関する興味深い事実

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

Susan Sarandon
Susan Sarandonオリジナル
2024-10-07 20:21:30237ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。