Skip to content

Commit b93cf7f

Browse files
committed
Update article.md
Promisification
1 parent 62d6147 commit b93cf7f

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

Diff for: 1-js/11-async/06-promisify/article.md

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
# Promisification
1+
# پرومیس‌سازی (Promisification)
22

3-
"Promisification" is a long word for a simple transformation. It's the conversion of a function that accepts a callback into a function that returns a promise.
3+
«پرومیس‌سازی» واژه‌ای طولانی برای یک تبدیل ساده است. این به معنای تبدیل یک تابعی است که از callback استفاده می‌کند، به تابعی که یک promise بازمی‌گرداند.
44

5-
Such transformations are often required in real-life, as many functions and libraries are callback-based. But promises are more convenient, so it makes sense to promisify them.
5+
چنین تبدیل‌هایی در دنیای واقعی اغلب لازم هستند، چرا که بسیاری از توابع و کتابخانه‌ها مبتنی بر callback هستند. اما استفاده از promiseها راحت‌تر و خواناتر است، بنابراین منطقی است که آن‌ها را پرومیس‌سازی کنیم.
66

7-
For instance, we have `loadScript(src, callback)` from the chapter <info:callbacks>.
7+
برای مثال، تابع loadScript(src, callback) را از فصل info:callbacks در نظر بگیرید.
88

99
```js run
1010
function loadScript(src, callback) {
@@ -21,7 +21,7 @@ function loadScript(src, callback) {
2121
// loadScript('path/script.js', (err, script) => {...})
2222
```
2323

24-
Let's promisify it. The new `loadScriptPromise(src)` function achieves the same result, but it accepts only `src` (no `callback`) and returns a promise.
24+
بیایید آن را پرومیس‌سازی کنیم. تابع جدید loadScriptPromise(src) همان نتیجه را به دست می‌دهد، اما فقط src را به عنوان ورودی می‌پذیرد (بدون callback) و یک promise بازمی‌گرداند.
2525

2626
```js
2727
let loadScriptPromise = function(src) {
@@ -37,13 +37,13 @@ let loadScriptPromise = function(src) {
3737
// loadScriptPromise('path/script.js').then(...)
3838
```
3939

40-
Now `loadScriptPromise` fits well in promise-based code.
40+
اکنون loadScriptPromise به خوبی با کدی که بر پایه‌ی promise نوشته شده سازگار است.
4141

42-
As we can see, it delegates all the work to the original `loadScript`, providing its own callback that translates to promise `resolve/reject`.
42+
همان‌طور که می‌بینیم، این تابع تمام کار را به تابع اصلی loadScript واگذار می‌کند و callback مخصوص به خود را به آن می‌دهد که نتیجه را به resolve/reject در promise تبدیل می‌کند.
4343

44-
In practice we'll probably need to promisify many functions, so it makes sense to use a helper. We'll call it `promisify(f)`: it accepts a to-promisify function `f` and returns a wrapper function.
44+
در عمل، احتمالاً نیاز خواهیم داشت که توابع زیادی را پرومیس‌سازی کنیم، بنابراین منطقی است که از یک تابع کمکی استفاده کنیم. ما آن را promisify(f) می‌نامیم: این تابع، یک تابع f را که می‌خواهیم پرومیس‌سازی کنیم دریافت می‌کند و یک تابع جدید (wrapper) بازمی‌گرداند.
4545

46-
That wrapper does the same as in the code above: returns a promise and passes the call to the original `f`, tracking the result in a custom callback:
46+
این تابع wrapper همان کاری را انجام می‌دهد که در کد بالا دیدیم: یک promise بازمی‌گرداند و فراخوانی تابع اصلی f را انجام می‌دهد، و نتیجه را از طریق یک callback سفارشی دنبال می‌کند.
4747

4848
```js
4949
function promisify(f) {
@@ -69,11 +69,11 @@ let loadScriptPromise = promisify(loadScript);
6969
loadScriptPromise(...).then(...);
7070
```
7171

72-
Here we assume that the original function expects a callback with two arguments `(err, result)`. That's what we encounter most often. Then our custom callback is in exactly the right format, and `promisify` works great for such a case.
72+
در اینجا فرض می‌کنیم که تابع اصلی، یک callback با دو آرگومان (err, result) را انتظار دارد. این رایج‌ترین حالتی است که با آن مواجه می‌شویم. در این صورت، callback سفارشی ما دقیقاً در قالب مناسب قرار دارد و promisify برای چنین حالتی بسیار خوب عمل می‌کند.
7373

74-
But what if the original `f` expects a callback with more arguments `callback(err, res1, res2, ...)`?
74+
اما اگر تابع اصلی f یک callback با آرگومان‌های بیشتری بخواهد، مثل callback(err, res1, res2, ...) چه می‌شود؟
7575

76-
Here's a more advanced version of `promisify`: if called as `promisify(f, true)`, the promise result will be an array of callback results `[res1, res2, ...]`:
76+
در اینجا نسخه پیشرفته‌تری از promisify را داریم: اگر آن را به صورت promisify(f, true) فراخوانی کنیم، نتیجه‌ی promise به صورت یک آرایه از نتایج callback خواهد بود: [res1, res2, ...].
7777

7878
```js
7979
// promisify(f, true) to get array of results
@@ -101,14 +101,14 @@ f = promisify(f, true);
101101
f(...).then(arrayOfResults => ..., err => ...)
102102
```
103103
104-
For more exotic callback formats, like those without `err` at all: `callback(result)`, we can promisify such functions manually without using the helper.
104+
برای قالب‌های غیرمعمول‌تر از callback، مثل آن‌هایی که اصلاً err ندارند، مانند callback(result)، می‌توانیم این توابع را به صورت دستی پرومیس‌سازی کنیم، بدون استفاده از تابع کمکی.
105105
106-
There are also modules with a bit more flexible promisification functions, e.g. [es6-promisify](https://github.com/digitaldesignlabs/es6-promisify). In Node.js, there's a built-in `util.promisify` function for that.
106+
همچنین ماژول‌هایی وجود دارند که توابع پرومیس‌سازی انعطاف‌پذیرتری ارائه می‌دهند، مانند es6-promisify. در Node.js نیز یک تابع داخلی به نام util.promisify برای این کار وجود دارد.
107107
108108
```smart
109-
Promisification is a great approach, especially when you use `async/await` (see the next chapter), but not a total replacement for callbacks.
109+
پرومیس‌سازی رویکرد بسیار خوبی است، به‌ویژه زمانی که از async/await استفاده می‌کنید (به فصل بعدی مراجعه کنید)، اما جایگزین کامل و همیشگی برای callbackها نیست.
110110

111-
Remember, a promise may have only one result, but a callback may technically be called many times.
111+
به خاطر داشته باشید که یک promise فقط می‌تواند یک نتیجه داشته باشد، اما یک callback از نظر فنی ممکن است چندین بار فراخوانی شود.
112112

113-
So promisification is only meant for functions that call the callback once. Further calls will be ignored.
113+
بنابراین، پرومیس‌سازی فقط برای توابعی مناسب است که callback را تنها یک بار صدا می‌زنند. فراخوانی‌های بعدی نادیده گرفته خواهند شد.
114114
```

0 commit comments

Comments
 (0)