扫码关注官方订阅号
谁能帮我用promise写一个例子?
需求是依次请求三个URL,并把请求结果依次输出http://baidu.com/a.htmlhttp://baidu.com/b.htmlhttp://baidu.com/c.html
业精于勤,荒于嬉;行成于思,毁于随。
用上jquery,写法大致如下:
var result = {}; new Promise(function (reslove, reject) { $.ajax({ url:'...a.html' }).done(function (data) { result.a = data; reslove(result); }).fail(function (data) { reject(data); }) }).then( function (value) { return new Promise(function () { $.ajax({ url:'...b.html' }).done(function (data) { result.b = data; reslove(result); }).fail(function (data) { reject(data); }) }) }, function (data) { alert('a.html请求出错,出错代码:' + data); } ).then( function (value) { $.ajax({ url:'...c.html' }).done(function (data) { result.c = data; console.log(result); }).fail(function (data) { alert('c.html请求出错,出错代码:' + data); }) }, function (data) { alert('b.html请求出错,出错代码:' + data); } )
这是一个简单的请求队列
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用,不用再套一层了.
jQuey.get()
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
用上jquery,写法大致如下:
这是一个简单的请求队列
建议用一个Promise队列,这样写起来就会简单些,比如我实现的一个队列queue-fun;
jQuey.get()返回的是一个延迟对象,可以当Promise用,不用再套一层了.