我仍然试图找出蓝鸟中正确的承诺模式,我遇到了这个特殊结构的问题 .
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仍然按预期工作?