web开发编程学习笔记

【promise-06】promise.resolve与prom

2018-12-18  本文已影响1人  飞蝗tengda

#Promise.resolve()和promise.reject()

常用来生成已经被决议为失败或者成功的promise实例

Promise.resolve

Promise.resolve 接收参数的时候有三种情况

  1. 传递一个普通的值
    比如一个字符串,一个数字。
//以下两种方式是完全等价的
let p1 = new Promise(resolve => {
   resolve('成功!');
 });

let p2 = Promise.resolve('成功!');
  1. 传递一个promise实例
//构建一个promise实例
let poruomiesi = new Promise(resolve => {
  resolve('耶!')
});

// 直接返回传递进去的promise
//这里是直接把poruomiesi实例返回给了p
let p = Promise.resolve(poruomiesi);
//data为传递过来的‘耶’
p.then(data => void console.log(data));

console.log(p === poruomiesi); //true
  1. 传递一个thenable (具有then方法的对象)
let obj = {
  then(cb) {
    console.log('我被执行了');
    cb('哼!');
  },
  oth() {
    console.log('我被抛弃了');
  }
}

// 立即执行then方法,这里的then方法调用的是obj的then方法
//如果这里then传递一个回调,就会成为obj的then方法中的参数cb
Promise.resolve(obj).then(data => {
  console.log(data);
});

promise.reject

promise.reject要简单一些,不管什么传递什么值,只要决议为失败,就把这个值传递过来。

Promise.reject({ then() { console.log(1) } })
  .then(() => {
    console.log('我不会被执行');
  }, e => {
    console.log(e);
  });

把同步的任务转成异步任务

console.log(1);

let p = new Promise(resolve => {
  console.log(2);
  resolve(); //异步执行
  console.log(3);
});

console.log(4);

p.then(() => {
  console.log(5);
});

console.log(6);

因为异步任务一定是在同步任务执行之后,所以以上代码的结果为:1,2,3,4,6,5

function createAsyncTask(syncTask) {
  return Promise.resolve(syncTask).then(syncTask => syncTask());
}

createAsyncTask(() => {
  console.log('我变成了异步任务!!!');
  return 1 + 1;
}).then(res => {
  console.log(res);
});

console.log('我是同步任务!');
上一篇下一篇

猜你喜欢

热点阅读