جديدة غير متزامن الاتصال داخل وظيفة رد الاتصال
-
05-07-2019 - |
سؤال
أود أن استخدام جوجل اياكس تغذية API لجلب متعددة خلاصات الأخبار و عرضها على صفحة ويب.
لا يمكنني استخدام جوجل FeedControl الدرجة لأنني أريد أن التحكم في طريقة العناصر من الأعلاف يتم عرضها.أن يترك لي مع جوجل تغذية الطبقة باعتبارها الخيار الوحيد.
لقد حصلت على عمل مع تغذية واحدة:توفير url رد وظيفة ؛ عملية نتائج تغذية داخل وظيفة رد الاتصال.
سؤالي:كيف يمكنني جلب متعددة يغذي ؟ وأود أن يكون بطريقة أو بأخرى لجعل جوجل الجديد.الأعلاف.تغذية الكائن داخل وظيفة رد الاتصال و تقديم عنوان url جديد ...نفس رد وظيفة (?)
لم أكن درست علوم الكمبيوتر ، لذلك هذا النوع من التكرار يجعل رأسي تدور.أي شخص يمكن أن تفسر ماذا علي أن أفعل ؟
المحلول
بالتأكيد, يمكنك أن تفعل ذلك بهذه الطريقة ، هنا بعض شبة الكود:
// 'feeds' is an array of the feed URLs
function grabFeeds(feeds) {
var index;
// We start with the first feed
index = 0;
// Kick off the process
feedWorker();
// Our "go get the next feed" function
function feedWorker() {
var feed;
// Do we have any more?
if (index < feeds.length) {
// Yes, request it and bump our index
// (You could combine these lines, but it's
// clearer to keep them separate)
feed = feeds[index];
++index;
start_feed_download(feed, callback);
}
}
// Our callback function
function callback() {
// ...do something with the result...
// Kick of the next feed (feedWorker is defensive,
// so we don't have to check index here)
feedWorker();
}
}
أنا لا أعرف جوجل API تغذية ، ومن ثم نائبا start_feed_download
وظيفة.
ما أن يفعل تبدأ عملية الاستيلاء على الأعلاف عن طريق grabFeeds
الوظيفة التي تقبل مجموعة من الأعلاف. grabFeeds
تنطلق feedWorker
, الذي يبدأ أول تغذية الطلب ، ثم يعود على الفور (من المؤكد تقريبا قبل أول تغذية يتم استردادها). callback
عمليات النتيجة ، ثم يسأل feedWorker
ركلة المقبل تغذية الطلب (إذا كان هناك واحد).
"السحر" هنا هو أن feedWorker
و callback
على حد سواء الإغلاق, لذا على الرغم من grabFeeds
وقد عاد بالفعل ، index
و feeds
المتغيرات يعيش على (في كائن يسمى "سياق التنفيذ") ما دام أي شيء مراجع الأمور داخل سياق التنفيذ في حالتنا هذه ، حتى callback
و feedWorker
لم تعد المشار إليه من قبل جوجل الأشياء.
نصائح أخرى
نعم ، يمكنك أن تفعل ذلك حسنا, فقط تأكد من أن كلما كنت تفعل العودية لديك حالتين: (أ) الحالة الأساسية (ب) العودية القضية.
فقط في الحالة الثانية لا وظيفة الدعوة نفسها ، تأكد من أن كنت لا في حالة قاعدة وإلا سوف ينتهي بك الأمر مع لانهائي العودية.على سبيل المثال ، في هذا مضروب وظيفة 0 هي الحالة الأساسية ، كل شيء آخر هو حالة متكررة
function fact(n) {
if (n==0) { return 1; }
else { return n * factorial(n-1) }
}
بدلا من ذلك, يمكنك القيام بها في وقت واحد ، أي.بدء أول واحد ، ثم البدء في ثانية واحدة, بدلا من الاضطرار إلى الانتظار لمدة أسبوع تماما الحمل قبل الثانية يبدأ التحميل.