【promise-06】promise.resolve与prom
2018-12-18 本文已影响1人
飞蝗tengda
#Promise.resolve()和promise.reject()
常用来生成已经被决议为失败或者成功的promise实例
Promise.resolve
Promise.resolve 接收参数的时候有三种情况
- 传递一个普通的值
比如一个字符串,一个数字。
//以下两种方式是完全等价的
let p1 = new Promise(resolve => {
resolve('成功!');
});
let p2 = Promise.resolve('成功!');
- 传递一个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
- 传递一个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('我是同步任务!');