我仍然试图找出蓝鸟中正确的承诺模式,我遇到了这个特殊结构的问题 .

function mainFunction() {
    Promise.map(arrayValues, function(value) {

        return function1(value)
            .then(function(resp1) {
                return function2(resp1);
            })
            .then(function(resp2) {
                return function3 (resp2);
            })
    })
    .then(function(resp) {
        console.log(resp);
    })
    .catch(function(e) {
        throw e;
    });
}

我从来没有得到任何输出到最后的console.log(resp),这让我觉得我正在错误地回复了这个承诺 . 我在这做错了什么?

编辑:如果我添加一个

.then(function(resp) {
     console.log(resp);
 })

对于function3的响应,它打印得很好 . 但是,这个响应似乎永远不会从Map函数返回,并且没有任何catch块被触发..


编辑3:

我想我明白了 . 我的代码中有一个混乱的解析/拒绝块,我没有完全思考,并没有正确地返回Promise,保持Promise.map挂起 .

我想这是一个很好的地方,可以找出如何妥善处理这个问题 .

我在这里有这个代码,它向服务器发出一个http请求,然后沿着多个URL解析HTML的主体,如下所示:

Promise.map(arrayURLs, function(url) {
    function requestHTML(url) {
        console.log('HTTP GET : ' + url);

        return request.getAsync({
            'url': url
        })
        .then(function(html) {
            console.log('HTTP RESP: ' + url);
            return html[0].body;
        })
        .error(function() {
            return Promise.reject();
            console.log('HTTP Err: ' + url);
        });
    }
})

这背后的想法是我在HTML返回的主体上做了一些工作 . 但是,如果HTTP请求失败,没有大问题,我只想忽略它并让其余的HTTP请求通过 . 我想在这里停止传播错误,因为如果它获得一个null的html体,其余的代码将会失败,并且这里很容易处理这个错误 .

优雅处理null返回体的情况的最佳方法是什么,以便_2480492仍然按预期工作?