这是一个使用promise的好用例吗?
Is this a good use case for using Promises?
我正在处理一串xmlhttprequest,每个都依赖于它之前的一个。Psuedocode:
xhr1.open('GET', 'http://foo.com');
xhr1.onload = function(e){
xhr2.open('POST', xhr1.response.url)
xhr2.onload = function(e){
xhr3.open('GET', xhr2.response.url2);
xhr3.onload = function(e){
console.log('hooray! you have data from the 3rd URL!');
}
xhr3.send();
}
xhr2.send();
}
xhr1.send();
在这种情况下,使用承诺将是一个好主意,以避免所有的回调垃圾?
是。如果你在一个then
中返回一个promise,那么下一个链式会监听这个promise,而不是从原来的promise中解析。假设ajaxCall
返回一个promise,那么您的代码将看起来像:
ajaxCall(1)
.then(function(result1){
return ajaxCall(2);
})
.then(function(result2){
return ajaxCall(3);
})
.then(function(result3){
// all done
});
// Sample AJAX call
function ajaxCall(){
return new Promise(function(resolve, reject){
// xhr code. call resolve/reject with accordingly
// args passed into resolve/reject will be passed as result in then
});
}
肯定是。假设有一个类似于如何保证原生XHR的帮助函数?,您的代码可以转换为
makeRequest('GET', 'http://foo.com').then(function(response1) {
return makeRequest('POST', response1.url);
}).then(function(response2) {
return makeRequest('GET', response2.url2);
}).then(function(response3) {
console.log('hooray! you have data from the 3rd URL!');
});
当然仍然是回调,但不再需要嵌套。此外,您将有简单的错误处理,并且代码看起来更干净(部分原因是与承诺无关的事实,即在其自己的函数中抽象XHR)。
相关文章:
- 将一个方法转换为promise:Nodejs
- 将其中一个异步方法重写为使用promise的方法
- 通过AngularJS promise下载一个文件
- promise.all在一个forEach循环中——所有东西都同时启动
- 多次调用promise函数,直到另一个promise函数满足条件
- 我可以克隆一个Promise吗
- 创建一个空的JavaScript Promise
- 与 promise 一起使用时,异步瀑布不执行下一个回调方法
- 使用 Promise 在另一个函数中调用带有 Bluebird 承诺库的函数
- 如何通过一个回调异步排队和执行多个promise
- 当使用promise时,为什么最后一个会被调用
- 如何访问AngularJS promise链中上一个promise的结果
- Promise.all()方法没有't解析为一个值
- Ember.js:路由返回多个模型,包括一个promise,给出错误
- Promise.promisify不是一个函数
- 在循环中使用 q promise 的最佳方法是什么?等待链完成,然后再迭代到下一个
- 如何使用 Parse.promise javascript 定义一个承诺数组并获取结果数组 [parse.com]
- 使用 Promise.map 返回一个与 bluebird “订购”的对象
- 然后,在前一个完成之前调用 Promise
- Complex Q promise:一个promise创建了一个其他promise的数组