فهم أمر التنفيذ في وعود جافا سكريبت
تقدم الوعود في جافا سكريبت نموذج برمجة غير متزامن حيث يتم تنفيذ التعليمات البرمجية بمجرد حدث معين، أو وعد ، يتم الوفاء. ومع ذلك، عند التعامل مع الوعود المتعددة، من الضروري فهم ترتيب التنفيذ لتجنب السلوك غير المتوقع.
ضع في اعتبارك مقتطف التعليمات البرمجية التالي:
Promise.resolve('A') .then(function(a){console.log(2, a); return 'B';}) .then(function(a){ Promise.resolve('C') .then(function(a){console.log(7, a);}) .then(function(a){console.log(8, a);}); console.log(3, a); return a;}) .then(function(a){ Promise.resolve('D') .then(function(a){console.log(9, a);}) .then(function(a){console.log(10, a);}); console.log(4, a);}) .then(function(a){ console.log(5, a);}); console.log(1); setTimeout(function(){console.log(6)},0);
عند التنفيذ، يمكنك ملاحظة الترتيب التالي للإخراج:
1 2 "A" 3 "B" 7 "C" 4 "B" 8 undefined 9 "D" 5 undefined 10 undefined 6
فهم أمر التنفيذ
التوصيات
لضمان ترتيب معين للتنفيذ، تجنب إنشاء سلاسل وعود غير متزامنة واعتمد بدلاً من ذلك على ربط الوعود بطريقة تسلسلية. قم بإرجاع الوعود من معالجات .then() الداخلية لربطها بالوعد الأصلي، كما هو موضح أدناه:Promise.resolve('A').then(function (a) { console.log(2, أ); إرجاع "ب" ؛ }).ثم (الوظيفة (أ) { فار p = Promise.resolve('C').then(function (a) { console.log(7, أ); }).ثم (الوظيفة (أ) { console.log(8, أ); }); console.log(3, أ); العودة ص؛ // ربط الوعد الداخلي بالسلسلة الأصلية }).ثم (الوظيفة (أ) { فار p = Promise.resolve('D').then(function (a) { console.log(9, أ); }).ثم (الوظيفة (أ) { console.log(10, أ); }); console.log(4, أ); العودة ص؛ // ربط الوعد الداخلي بالسلسلة الأصلية }).ثم (الوظيفة (أ) { console.log(5, أ); }); console.log(1); setTimeout(وظيفة () { console.log(6) }, 0);Promise.resolve('A').then(function (a) { console.log(2, a); return 'B'; }).then(function (a) { var p = Promise.resolve('C').then(function (a) { console.log(7, a); }).then(function (a) { console.log(8, a); }); console.log(3, a); return p; // Link the inner promise to the parent chain }).then(function (a) { var p = Promise.resolve('D').then(function (a) { console.log(9, a); }).then(function (a) { console.log(10, a); }); console.log(4, a); return p; // Link the inner promise to the parent chain }).then(function (a) { console.log(5, a); }); console.log(1); setTimeout(function () { console.log(6) }, 0);مع هذا النهج، يصبح أمر التنفيذ حتميًا تمامًا: 1، 2 "A"، 3 "B"، 7 "C"، 8 غير محدد، 4 غير محدد، 9 "D"، 10 غير محدد، 5 غير محدد، و6.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3