Promise是ES6新增的一个对象,咳咳,要想使用这个对象,首先需要…
1、对象的创建
new Promise();
接下来就可以使用了,具体怎么使用呢?Promise这个对象可以传入一个函数。
new Promise(function() {
console.log("123");
});
接下来就可以在函数中进行操作
注意,传入promise对象内的函数里面的代码是同步执行的,所以输出结果为123
但是(But)Promise就是为了解决异步处理而生的!
Promise的中文是——承诺,所以承诺会有两种结果resolve(解决) reject(拒绝)
要么接受并解决,要么直接拒绝
new Promise(function(resolve, reject) {
})
那么具体应该怎么(resolve)解决和(reject)拒绝呢?
2、其实非常非常简单,只需要把resolve和reject在传入promise对象内的函数里面调用一下就可以了
new Promise(function(resolve, reject) {
resolve();
reject();
})
除了Peomise对象传入的函数里面的代码是同步执行的Promise()对象还会返回一个promise值,所以我们就来接收一下
let p = new Promise(function(resolve, reject) {
resolve();
reject();
})
接收到的p的值是一个primise对象,这个对象会有一个then()方法
(不要问我是怎么知道的,问就是规定)
这个then()方法需要两个函数分别来处理resolve(解决)和reject(拒绝)的操作
let p = new Promise(function(resolve, reject) {
resolve();
reject();
})
p.then(function() {
console.log(123);
}, function() {
console.log(456);
})
输出结果为123,有没有猜对呢?
其实也好理解,一个承诺要么解决了,要么直接拒绝,这又不是薛定谔的承诺,这是大家的承诺!
3、拓展
3.1、还可以在resolve(解决)和reject(拒绝)两个方法里面传值
let p = new Promise(function(resolve, reject) {
resolve("你好,世界");
reject("世界,你好");
})
p.then(function() {
console.log();
}, function() {
console.log();
})
因为有了实参,所以必须要有形参,但是形参在哪里定义,这是个问题(This is a question)
如下图所示形参需要在处理resolve(解决)和reject(拒绝)的两个方法里面定义!
let p = new Promise(function(resolve, reject) {
resolve("你好,世界");
reject("世界,你好");
})
p.then(function(date) {
console.log(date);
}, function(val) {
console.log(val);
})
输出结果为你好世界
所以得到一个结论,resolve(解决)和reject(拒绝)传入的实参 == 解决方法的形参