2013-12-09 47 views
1

我試圖理解承諾返回另一個承諾成爲回報價值的想法。這就是我在wiki上的Q文檔中閱讀的內容。 https://github.com/kriskowal/q#tutorialq-io嵌套承諾

它是理想的情況,因爲我使用q-io/http使用promise來發出請求。但是,函數返回新承諾中的正文的值。

而不是將我的代碼的其餘部分嵌入到我的第一個函數中。我希望在嵌套承諾完成時收到通知。但是,由於範圍,我似乎無法做到。但我一直在讀,我的外在功能應該成爲內在承諾的價值。我錯過了什麼嗎?

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

謝謝甜菜根 - 甜菜根,你的答案肯定會在這種情況下工作。 – Adam

+0

Adam,和Bergi的解決方案一樣。爲了保持簡短,我省略了簡化。正如你所看到的,方法鏈接使得對'getFiles'的賦值是不必要的。 –

回答

2

我覺得getFiles應該成爲內在的承諾。對?

不。承諾不會改變它的價值。但是,.then方法確實會返回一個新的承諾,將通過「內部承諾」read方法(將在解析getFiles時調用該方法)的結果解決。

您可以縮短你的代碼

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

仍然試圖處理這個,但它的作品完美。謝謝Bergi。 – Adam