/*
promise 承诺
es6中的语法
当你要执行异步代码的时候
给我,我会给你一个结果
Promise 也是js中内置的构造函数,Promise可以实例化对象
// new 构造函数的时候,传递一个参数,参数是一个回调函数
// 在执行 new 构造函数的时候,就会执行这个回调函数
语法:
let p = new Promise(function(resolve,reject){
// 此处执行异步代码
})
p 就是promise对象
promise对象有then 和 catch 方法
当异步代码成功的时候,也就是resolve调用的时候,会执行promise的then方法
resolve(参数1) .then(function(形参1){})
resolve调用的时候参数1 会传递给形参1
当异步代码失败的时候,也就是reject调用的时候,会执行promise的catch方法
异步代码的执行状态:也就是promise对象的状态
pending 执行中
resolved(fulfilled) 成功
rejected 失败
promise的状态变化,只能从 `执行中` 到 `成功`,或者 `执行中` 到 `失败`
*/
// let p = new Promise((resolve,reject)=>{
// // console.log('实例化promise对象的时候就执行');
// // 这个函数有两个参数,也是回调函数
// // 当异步代码执行成功的时候,调用res函数,
// // 当异步代码执行失败的时候,调用rej函数
// resolve('hello');
// // reject(00);
// // console.log('此代码有执行,但是promise状态不改变');
// })
// console.log(p);
// p.then(function(str){
// console.log(str); // hello
// console.log('我们完成啦');
// }).catch(function(num){
// console.log(num);
// })
// then可以连写,但是后面的then方法中的回调函数获取不到参数
// p.then(num=>console.log(num)).then(num2=>{
// console.log(num2);
// console.log(12345);
// })
// promise的链式调用
// 当then方法中回调函数返回的是一个新的promise对象,则后面的then方法,只有在这个新promise对象中调用resolve函数才执行
new Promise((reslove,reject)=>{
reslove('12345');
})
.then(function(str){
console.log(str);
return new Promise(function(resolve,reject){
resolve(str)
})
})
.then(function(num){
console.log(num);
})
/*
async/await
异步 / 等待
async这个关键字是用来修饰函数的
被async修饰的函数,里面的可以使用await关键字
await 用来修饰异步的promise的,可以让异步代码,在函数中以同步代码的形式执行
*/
// async 修饰函数
async function fn(){
// 使用pAjax请求04-await.php
// await 修饰的代码,会当做同步代码执行,如果当前代码没有执行结束,则后面的代码也不会执行
// 通过await修饰后的异步代码,可以当做同步代码一样接受返回值
let result = await pAjax({
url: './04-await.php',
fn:(res)=>{
// console.log(res);
resolve(res)
}
}).then(num=>{
// console.log(num);
return num
})
// 接收到pAjax请求的返回值
console.log(result);
console.log('666');
}
fn();