سؤال

وفيما يلي مقتطفات الشفرة ما يعادل?

الإصدار 1

function doSomething() {
  var defer = $q.defer();

  foo().then(function() {
    bar().then(function() {
      defer.resolve();
    });
  });

  return defer.promise;
}

الإصدار 2

function doSomething() {
  return foo().then(bar);
}
هل كانت مفيدة؟

المحلول

هناك العديد من الاختلافات بين هذين النهجين.

الفرق الرئيسي بين اثنين من القصاصات التي في version 2 يتم ضمنا تمرير قيمة من حل foo مباشرة bar.بالإضافة إلى أن doSomething سيتم حل مهما كان bar سيتم حل ، في حين أنه في version 1 والنتيجة هي التخلص منها.

بعض النقاط الهامة الإضافية التي قدمتها بنيامين Gruenbaum:

(أ) إذا كان شريط إشارة خطأ 1 ترفض الداخلية الوعد 2 يلقي.
(ب) 1 يتطلب الإشارة إلى $q حيث 2 هو تنفيذ الملحد.
(ج) الإصدار 1 ليست استثناء آمنة و الرفض ابتلع حيث الإصدار 2 سيتيح لك .قبض على الرفض.;هناك أصغر عدة اختلافات أيضا.انظر ستاكوفيرفلوو.com/أسئلة/22539815

يمكنك أيضا كتابة مثل هذا.
بهذه الطريقة أنت لا تحصل على الضمني تمر الحوض الصغير من حسم القيمة من foo إلى bar ( انها صريحة الآن ) ، التي يمكن أن يكون مربكا أو التغاضي عنها بسهولة.فإنه يمكن أيضا أن تكون مفيدة إذا كنت تريد أن تفعل شيئا مع حل القيم foo أو bar قبل أن تعود لهم.

function doSomething() {
  return foo().then(function(res){
     // maybe  do something with the result of foo
     return bar(res);
  }).then(function(res){
     // maybe do something with the result of bar
     return res;
  });
}

يدويا إنشاء المؤجلة كائن يجب أن يكون الحد الأدنى و هو عموما مضاد نمط.

https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns#the-deferred-anti-pattern

المبدأ الأساسي التي تم شرحها هنا هو أن وعد تعتمد الدولة من عاد وعد ( أو thenable ) من الداخل حل الأسلوب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top