「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Javascript Promise に関する興味深い事実

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

2024 年 11 月 9 日に公開
ブラウズ:740

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


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

リリースステートメント この記事は次の場所に転載されています: https://dev.to/theteabagcoder/10-fun-facts-about-javascript-promises-3jle?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3