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));