الفرق بين المراجعتين لصفحة: «JavaScript/Promise/resolve»

من موسوعة حسوب
إنشاء الصفحة. هذه الصفحة من مساهمات عبد اللطيف ايمش
 
طلا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الدالة <code>Promise.resolve()‎</code>}}</noinclude>
<noinclude>{{DISPLAYTITLE:الدالة <code>Promise.resolve()‎</code> في JavaScript}}</noinclude>
الدالة <code>Promise.resolve(value)‎</code> ستُعيد كائن <code>[[JavaScript/Promise|Promise]]</code> الذي قُبِل (resolved) مع القيمة <code>value</code> المُحدَّدة. إذا كانت القيمة هي وعدٌ، فسيُعاد ذاك الوعد. وإذا كانت القيمة تمتلك استدعاءً للدالة <code>[[JavaScript/Promise/prototype/then|then]]</code>، «فسيتبع» الوعد المُعاد ذاك الاستدعاء، وسيُعيد حالته النهائية؛ وفيما عدا ذلك من الحالات، سيتم تحقيق الوعد مع القيمة المعطية.<syntaxhighlight lang="javascript">
الدالة <code>Promise.resolve(value)‎</code> ستُعيد كائن <code>[[JavaScript/Promise|Promise]]</code> الذي قُبِل (resolved) مع القيمة <code>value</code> المُحدَّدة. إذا كانت القيمة هي وعدٌ، فسيُعاد ذاك الوعد. وإذا كانت القيمة تمتلك استدعاءً للدالة <code>[[JavaScript/Promise/prototype/then|then]]</code>، «فسيتبع» الوعد المُعاد ذاك الاستدعاء، وسيُعيد حالته النهائية؛ وفيما عدا ذلك من الحالات، سيتم تحقيق الوعد مع القيمة المعطية.<syntaxhighlight lang="javascript">
var promise1 = Promise.resolve([1, 2, 3]);
var promise1 = Promise.resolve([1, 2, 3]);

مراجعة 08:30، 19 أبريل 2019

الدالة Promise.resolve(value)‎ ستُعيد كائن Promise الذي قُبِل (resolved) مع القيمة value المُحدَّدة. إذا كانت القيمة هي وعدٌ، فسيُعاد ذاك الوعد. وإذا كانت القيمة تمتلك استدعاءً للدالة then، «فسيتبع» الوعد المُعاد ذاك الاستدعاء، وسيُعيد حالته النهائية؛ وفيما عدا ذلك من الحالات، سيتم تحقيق الوعد مع القيمة المعطية.

var promise1 = Promise.resolve([1, 2, 3]);

promise1.then(function(value) {
  console.log(value);
  //: Array [1, 2, 3]
});

البنية العامة

Promise.resolve(value);
Promise.resolve(promise);
Promise.resolve(thenable);

المعاملات

value

الوسيط الذي سيُقبل مع هذا الوعد، ويمكن أن يكون كائن Promise أو كائن Promise مع استدعاء then()‎ عليه.

القيمة المعادة

سيُقبَل الوعد Promise مع القيمة المعطية، أو إذا مُرِّر وعدٌ آخر كقيمة، فستكون القيمة المُعادة من الوعد هي كائن Promise المُمرَّر إليه.

الوصف

الدالة الساكنة ()Promise.resolve تُعيد وعدًا Promise الذي قد قُبِل (resolved).

أمثلة

استخدام الدالة ()Promise.resolve:

Promise.resolve('Success').then(function(value) {
  console.log(value); // "Success"
}, function(value) {
  // لن تستدع
});

قبول مصفوفة:

var p = Promise.resolve([1,2,3]);
p.then(function(v) {
  console.log(v[0]); // 1
});

قبول كائن Promise آخر:

var original = Promise.resolve(33);
var cast = Promise.resolve(original);
cast.then(function(value) {
  console.log('value: ' + value);
});
console.log('original === cast ? ' + (original === cast));

// سيُطبَع بالترتيب:
// original === cast ? true
// value: 33

السبب في أنَّ الناتج قد ظهر بترتيبٍ مقلوب هو أنَّ الدوال المستدعاة عبر then()‎ ستُستدعى بشكل غير متزامن. يمكنك العودة إلى توثيق الدالة then()‎ للتفاصيل. قبول كائنات تستعمل then()‎ ورمي أخطاء:

// قبول كائن يستعمل الدالة then
var p1 = Promise.resolve({ 
  then: function(onFulfill, onReject) { onFulfill('fulfilled!'); }
});
console.log(p1 instanceof Promise) // true, object casted to a Promise

p1.then(function(v) {
    console.log(v); // "fulfilled!"
  }, function(e) {
    // لن تستدع
});

// سيرمي خطأ قبل قبول الوعد
// سيرفض الوعد
var thenable = { then: function(resolve) {
  throw new TypeError('Throwing');
  resolve('Resolving');
}};

var p2 = Promise.resolve(thenable);
p2.then(function(v) {
  // لن تستدع
}, function(e) {
  console.log(e); // TypeError: Throwing
});

// سيرمى خطأ بعد قبول الوعد
// سيُقبل الوعد
var thenable = { then: function(resolve) {
  resolve('Resolving');
  throw new TypeError('Throwing');
}};

var p3 = Promise.resolve(thenable);
p3.then(function(v) {
  console.log(v); // "Resolving"
}, function(e) {
  // لن تستدع
});

المصادر