الدالة Promise.resolve()‎ في JavaScript

من موسوعة حسوب

الدالة 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) {
  // لن تستدع
});

المصادر