2013-12-09 2 views
1

Я пытаюсь понять идею о том, что обещание, которое возвращает другое обещание, станет значением возврата. Это то, что я читал в Q-документах по вики. https://github.com/kriskowal/q#tutorialВложенные обещания с q-io

Его идеальная ситуация, поскольку я использую q-io/http, который использует обещание сделать запрос. Однако функция возвращает значение тела в новом обещании.

Вместо того, чтобы вставлять остальную часть моего кода в мою первую функцию. Я хочу получить уведомление, когда вложенное обещание будет завершено. Однако, из-за масштаба, я не могу это сделать. Но я продолжаю читать, что моя внешняя функция должна стать ценностью внутреннего обещания. Я что-то упускаю?

Ex.

module.exports = function (obj) { 
    var getFiles = HTTP.request(obj); 

    getFiles 
    .then(function(res) { 
     return res.body.read() 
    }); 
    return getFiles; 
}; 

Я хочу получать уведомления, когда res.body.read() выполняет свое обещание, используя Q.all(), но я не знаю, как получить это значение. Я чувствую, что getFiles должен стать тем внутренним обещанием. Правильно?

+0

Попробуйте возвращенную выход 'getFiles.then()' от внешней функции. –

+0

Спасибо Beetroot-Beetroot, ваш ответ определенно будет работать и в этой ситуации. – Adam

+0

Адам, это то же самое решение, что и у Берги. Чтобы не допустить этого, я отказался от упрощения. Как вы можете видеть, цепочка методов делает назначение 'getFiles' ненужным. –

ответ

2

Я чувствую, что getFiles должен стать тем внутренним обещанием. Правильно?

Нет. Обещание не изменит его значение. Однако метод .then возвращает новое обещание, которое будет разрешено с помощью метода «внутреннего обещания» read (который будет вызываться при разрешении getFiles).

Вы можете сократить свой код

module.exports = function (obj) { 
    return HTTP.request(obj).then(function(res) { 
    return res.body.read() 
    }); 
}; 
+0

Все еще пытаясь обработать это, но он отлично работает. Спасибо, Берги. – Adam

Смежные вопросы