كيفية مزامنة استعلام MongoDB غير المتزامن في NodeJS

StackOverflow https://stackoverflow.com//questions/22023146

  •  21-12-2019
  •  | 
  •  

سؤال

لدي بيان for-loop ونص MongoDB غير متزامن داخل الحلقة.ما أريد القيام به هو أن أصنع find الاستعلام من قاعدة بيانات MongoDB الخاصة بي، ودفع النتيجة إلى صفيف.

هنا هو الرمز:

function() arrResult() {
  var arr = [];
  for(...) {
    collection.find({ foo: i }, function (err, cursor) {
      arr.push(cursor);   
    }    
  }
  return arr;
}

لكن من الواضح أن القيمة المرجعة للدالة ستكون عبارة عن مصفوفة فارغة.

أريد معالجة هذه المشكلة باستخدام Q وحدة.هل هناك أي حلول؟

هل كانت مفيدة؟

المحلول

أريد معالجة هذه المشكلة باستخدام وحدة Q.هل هناك أي حلول؟

نعم، الوعود هي فكرة سهلة للغاية للتعامل مع هذا الأمر.يمكنك تنفيذ الاستعلامات بالتوازي، وجمع نتائجها معها all.

على وجه الخصوص، مع Q انها تبدو مثل هذا:

function arrResult(…) {
    var promises = [];
    for (…)
        promises.push( Q.ninvoke(collection, "find", {foo: i}) );
    return Q.all(promises);
}

arrResult(…).then(function(arr) {
    …
}, function(err) {
    // first error, if any occured
});

نصائح أخرى

أنت بحاجة إلى آلية مزامنة تعمل كبوابة للعملية.يجب أن يصل كل استعلام عائد إلى البوابة، على سبيل المثال.يتناقص بعض العداد ويودع نتائجه.عندما يصل الجميع إلى البوابة، يقوم رد الاتصال النهائي بإرجاع النتائج المجمعة.

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