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")
});

 

posted on 2021-11-02 10:22  空明流光  阅读(243)  评论(0编辑  收藏  举报

导航