javascript 异步回调链式调用 promise
<script> new Promise((resolve,reject) => { setTimeout(()=>{ resolve('sss'); },1000); }).then((data) =>{ console.log(data);//注意,此处不能写异步回调,异步必须写在下面的promise方法体内部,否则会有问题 return new Promise(resolve => { resolve(data + "bbb"); }); }).then(data =>{ console.log(data) }); </script>
还有一个Promise.all方法
Promise.all([ new Promise((resolve, reject) => { setTimeout(() => { resolve(null); }, 1000); }), new Promise((resolve, reject) => { setTimeout(() => { resolve(null); }, 3000); }) ]).then(result => { alert("ok"); });
Promise.all的语法是并发的,如果要顺序执行:
var promise = new Promise((resolve, reject) => { setTimeout(() => { resolve(null); }, 1); //延迟以便后续的then可以接上 }); for (var i = 0; i < 100; i++) { let num = i; promise = promise.then(data => { return new Promise((resolve, reject) => { console.log("start " + num); setTimeout(() => { console.log("end " + num); resolve(num); }, 10); }) }); promise.num = i; } promise.then(data => { console.log("all over") });
桂棹兮兰桨,击空明兮溯流光。