2016-04-14 5 views
0

Я использую реализацию kriskowal q.последовательная цепочка обещаний с массивом данных, как решить цепочку обещаний?

У меня есть массив объектов данных, каждый с идентификатором.

Мне нужно привязать их последовательно к обещаниям, потому что я соблюдаю правила ограничения скорости, установив его на 1 запрос в секунду.

Однако у меня возникли проблемы с решением обещаний и с моими киосками. То есть Я вижу вывод addVideo, getInfo, retryIfNeeded и задержку в 1 секунду для самого первого видео, но я не вижу ничего такого для последующих видео.

Что я хочу сделать после задержки, чтобы решить эту цепочку, чтобы следующий список обещаний продолжался во втором идентификаторе видео.

Как это сделать? Что я делаю не так? Я искал много на Google, но не нашел решение, чтобы любые предложения приветствуются

Редактировать добавило jsfiddle: http://jsfiddle.net/gpa7ym18/4

var promiseChain = data.items.reduce(function(promise, video) { 
    video.type = type; 
    return promise 
     .then(addVideo) 
     .then(getInfo) 
     .then(retryIfNeeded) 
     .then(function() { 
      return q.delay(1000) 
        .done(function() { 
         NEED TO RESOLVE HERE but there is NO Defered object 
         to set defer.resolve. How do I resolve this promise chain? 
        }); 
     }); 
    }, q.resolve(data.items[0])); 
+1

Просто 'возвращение', как всегда? Но используйте 'then', никогда' done'. – Bergi

+0

, но я попытался удалить последние .then и .done, но он не разрешил –

+0

, потому что я использую q.resolve (data.items [0]) –

ответ

1

Вам не нужно решать ничего.

Вы должны просто вернуть отложенное обещание, и это станет ценностью всей цепочки.
Это именно то, как работает цепочка цепей.

+0

вы можете взглянуть на мои комментарии, которые я добавил, и посмотреть, можете ли вы мне помочь? Я в основном хочу воздействовать на каждый объект в моем массиве с обещаниями последовательности и цепочкой: –

+0

@Chowza: вам нужно связать 'video' с вашей функцией в качестве параметра:' .then (addVideo.bind (null, video)) ' , Читайте http://blog.slaks.net/2015-06-10/advanced-promise-usage/ – SLaks

+0

Принимая ответ, так как это, наряду с комментариями от bergi, помогло мне ответить на эту проблему. http://jsfiddle.net/gpa7ym18/8/ проиллюстрировал мое решение –