2013-12-09 158 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