3.9 KiB
title | localeTitle |
---|---|
Await Promises | في انتظار الوعود |
في انتظار الوعود
يجعل مشغلي async
/ await
من السهل تنفيذ العديد من وعود async. كما أنها تسمح للمهندسين بكتابة أكواد أكثر وضوحًا وإيجازًا وقابلة للاختبار.
لفهم هذا الموضوع ، يجب أن يكون لديك فهم قوي لكيفية عمل الوعود .
بناء الجملة الأساسي
`` `جافا سكريبت function slowResolvedPromiseFunc (string) { return new Promise (resol = = { setTimeout (() => { حل (سلسلة)؛ } ، 5000) ؛ })؛ }
وظيفة async doIt () { const myPromise = await slowResolvedPromiseFunc ("foo")؛ console.log (myPromise)؛ // "foo" }
افعلها()؛
``There are a few things to note:
- The function that encompasses the
await
declaration must include theasync
operator. This will tell the JS interpreter that it must wait until the Promise is resolved or rejected. - The
await
operator must be inline, during the const declaration. - This works for
reject
as well asresolve
.
Nested Promises vs. Async
/ Await
Implementing a single Promise is pretty straightforward. In contrast, Chained Promises or the creation of a dependency pattern may produce "spaghetti code".
The following examples assume that the request-promise
library is available as rp
.
Chained/Nested Promises
``
جافا سكريبت // الوعد الأول const fooPromise = rp ("http://domain.com/foo")؛
fooPromise.then (resultFoo => { // يجب انتظار "foo" لحلها console.log (resultFoo)؛
`const barPromise = rp("http://domain.com/bar"); const bazPromise = rp("http://domain.com/baz");
return Promise.all([barPromise, bazPromise]); `
}). then (resultArr => { // تعامل مع "bar" و "baz" هنا console.log (resultArr [0])؛ console.log (resultArr [1])؛ })؛
### `async` and `await` Promises
جافا سكريبت // لف كل شيء في وظيفة متزامن وظيفة async doItAll () { // انتزاع البيانات من نقطة النهاية "فو" ، ولكن انتظر الحل console.log (في انتظار rp ("http://domain.com/foo"))؛
`// Concurrently kick off the next two async calls, // don't wait for "bar" to kick off "baz" const barPromise = rp("http://domain.com/bar"); const bazPromise = rp("http://domain.com/baz");
// After both are concurrently kicked off, wait for both const barResponse = await barPromise; const bazResponse = await bazPromise;
console.log(barResponse); console.log(bazResponse); `
}
// وأخيرا ، استدعاء الدالة المتزامن doItAll (). ثم (() => console.log ('Done!'))؛
``The advantages of using async
and await
should be clear. This code is more readable, modular, and testable.
It's fair to note that even though there is an added sense of concurrency, the underlying computational process is the same as the previous example.
Handling Errors / Rejection
A basic try-catch block handles a rejected Promise. ``
جافا سكريبت خطأ غير متزامن functionExample () { محاولة { const rejectedPromise = await Promise.reject ("Oh-oh!")؛ } catch (خطأ) { console.log (خطأ)؛ // "اه-اوه!" } }
errorExample ()؛ `` `
معلومات اكثر:
await
مشغل MDN مستنداتasync
Function Operator MDN Docs