谁能帮我用promise写一个例子?
需求是依次请求三个URL,并把请求结果依次输出
http://baidu.com/a.html
http://baidu.com/b.html
http://baidu.com/c.html
谁能帮我用promise写一个例子?
需求是依次请求三个URL,并把请求结果依次输出
http://baidu.com/a.html
http://baidu.com/b.html
http://baidu.com/c.html
这是一个简单的请求队列
var urls = [
"https:/baidu.com/a.html",
"https:/baidu.com/b.html",
"https:/baidu.com/c.html"
]
var sequence = Promise.resolve()
urls.forEach(function(url) {
sequence = sequence.then(function() {
return getUrlfunc(url)
}).then(function(result) {
console.log(result.length)
}).catch(function(err){
console.log(err)
})
})
function getUrlfunc(url) {
return new Promise(function(resolve, reject){
$.get(url, function(result){
resolve(result)
})
})
}
var urls = [
"https:/baidu.com/a.html",
"https:/baidu.com/b.html",
"https:/baidu.com/c.html"
];
var i = 0;
function next(){
if(i>=urls.length) return;
Promise.resolve(jQuery.get(urls[i])).then(function(data){
console.log(data);
next();
});
i++;
}
建议用一个Promise队列,这样写起来就会简单些,比如我实现的一个队列queue-fun;
var urls = [
"https:/baidu.com/a.html",
"https:/baidu.com/b.html",
"https:/baidu.com/c.html"
];
var queue = new queueFun(1); //实例化一个并发为1的队列,达到依次执行的目的
function getHtml(url){
return jQuey.get(url);
}
urls.forEach(function(url) {
queue.push(getHtml,[url]).then(console.log)
});
queue.start();
jQuey.get()
返回的是一个延迟对象,可以当Promise用,不用再套一层了.
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
用上jquery,写法大致如下: