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