Zeit チームのブログ投稿 に触発されて、PayPal チームは最近、サーバー側データベースを Async/Await に移行しました。私の経験を皆さんと共有したいと思います。
まず、次の 2 つの用語を理解しましょう:
あなたはいつも Async と Await について一緒に話しますが、知っておく必要があるのは、これらは 2 つの異なるものであるということです。 Async 関数と Await キーワードについて理解する必要があるのは、これらは確かにある程度の関連性がありますが、Async 関数は Await なしでも使用できるということです。
#関連する学習の推奨事項:
// here is an async function async function getNumber() { return 4 // actually returns a Promise } // the same function using promises function getNumber() { return Promise.resolve(4) }
// async function to show user data async function displayUserData() { let me = await fetch('/users/me') console.log(me) }// promise-based equivalent function displayUserData() { return fetch('/users/me').then(function(me) { console.log(me) }) })
// basic error handling with async functions async function getData(param) { if (isBad(param)) { throw new Error("this is a bad param") } // ... } // basic promise-based error handling example function getData(param) { if (isBad(param)) { return Promise.reject(new Error("this is a bad param")) } // ... }
try/catch でラップするか、返された Promise に catch ハンドラーを追加する必要があります。
// rely on try/catch around the awaited Promise async function doSomething() { try { let data = await getData() } catch (err) { console.error(err) } } // add a catch handlerfunction doSomething() { return getData().catch(err => { console.error(err) }) }
// catch any errors in the promise and either forward them to next(err) or ignore them const catchErrors = fn => (req, res, next) => fn(req, res, next).catch(next) const ignoreErrors = fn => (req, res, next) => fn(req, res, next).catch(() => next()) // wrap my routes in those helpers functions to get error handling app.get('/sendMoney/:amount', catchErrors(sendMoney)) // use our ignoreErrors helper to ignore any errors in the logging middleware app.get('/doSomethingElse', ignoreErrors(logSomething), doSomethingElse) // controller method can throw errors knowing router will pick it up export async function sendMoney(req, res, next) { if (!req.param.amount) { throw new Error('You need to provide an amount!') } await Money.sendPayment(amount) // no try/catch needed res.send(`You just sent ${amount}`)} // basic async logging middleware export async function logSomething(req, res, next) { // ... throw new Error('Something went wrong with your logging') // ... }
next(err) を使用していました。ただし、
async/await を使用すると、コード内の任意の場所にエラーを配置でき、ルーターはこれらのエラーを Express が提供する次の関数にスローするため、エラー処理プロセスが大幅に簡素化されます。
以上がJavaScript の Async/Await の新しい構文を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。