Promise
const asyncImg = (url) => (new Promise((resolve, reject) => {const image = new Image();image.onload = () => {resolve(image);};image.onerror = (err) => {reject(err);};image.src = url}))asyncImg('https://imgm.gmw.cn/attachement/jpg/site2/20200501/f832e46f786d20163c0c37.jpg');
const getJson = (url) => (new Promise((resolve, reject) => {const handler = function () {if (this.readyState !== 4) {return;}if (this.status === 200) {resolve(this.response);} else {reject(new Error(this.statusText))}};const client = new XMLHttpRequest();client.open('GET', url);client.onreadystatechange = handler;client.responseType = 'json';client.setRequestHeader('Accept', 'application/json');client.send();}));getJson('http://api.qingyunke.com/api.php?key=free&appid=0&msg=鹅鹅鹅');
// JSONP 处理跨域const handler = (res) => {console.log(res);}const JSONP = (url) => {const script = document.createElement('script');script.src = `${url}&callback=${handler}`;document.body.insertBefore(script, document.body.firstChild);}JSONP('http://api.qingyunke.com/api.php?key=free&appid=0&msg=鹅鹅鹅');
p1 的状态决定了 p2 的状态。如果p1的状态是 pending,那么 p2 的回调函数就会等待 p1 的状态改变;如果p1的状态已经是 Resolved 或者是 Rejected, 那么回调函数将会立刻执行。
const p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve(1);}, 3000);});const p2 = new Promise((resolve, reject) => {setTimeout(() => {resolve(p1);}, 1000);});p2.then(res => console.log(res)).catch(err => console.log('err', err));
