Javascript Promise(function(a,b))实现异步操作链

可以通过Promise函数,实现一连串的业务组合。

then有两个参数,分别是两个function 按顺序对应上面的myResolve, myReject两个function
1.onFulfilled
2.OnRejected

  • 参考:
  • 1、Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)
  •  2、Promise构造函数接收一个函数作为参数,该函数的两个参数分别是 resolve 和 reject
  •  3、一个promise对象只能改变一次状态,成功或者失败后都会返回结果数据。
  •  4、then 方法可以接收两个回调函数作为参数,第一个回调函数是Promise对象的状态改变为 resoved 是调用,第二个回调函数是 Promise 对象的状态变为 rejected 时调用。其中第二个参数可以省略。
  •  5、catch 方法,该方法相当于最近的 then 方法的第二个参数,指向 reject 的回调函数,另一个作用是,在执行resolve回调函数时,如果出错,抛出异常,不会停止运行,而是进入catch 方法中。
function print(delay, message) {


  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      console.log(message);
      resolve(message);
    }, delay);
  }).then(function(value) {
    console.log(value);
    return value;
  }).then(function(value) {
    console.log("value=" + value);
    if(10/0) throw "happen error"
    return value;
  }).catch(function(err) {
    console.log("err=" + err);
  }).finally(function(value) {
    // value没有传递到这里,所有 finally(function())无参
    console.log("final value =" + value);
  });
  
  
}

print(10, 'OK')

代码在线演示。http://jsfiddle.net/developerofbamboobook/ag6no21t/78/




JavaScript Promise

async 和 await 搭配使用,等待异步的结果 

function SicBo() {
  return new Promise((resolve, reject) => {
    console.log("开始摇 ")
    setTimeout(() => {
      let n = parseInt(Math.random() * 6 + 1, 10) //1~6
      resolve(n)
    }, 1000)
  })
}
SicBo().then(
    
    (n)=>{console.info("1秒前:"+n)},
    
    //function(y){console.info('ss')}
);

async function Roll(){
    let n = await SicBo() //不写括号就不会执行 new Promise
  console.log('1秒后:'+n)
}

Roll() //记得要调用函数

 

你可能感兴趣的:(Script,javascript)