浏览器是多线程的,每打开一个tab就是一个线程
因为js是单线程的,一次只能执行一次任务,多个任务等待上一任务。像ajax请求这种等待服务器返回数据就会被挂起,但返回数据就会加入主线程
1. promise (resolve,reject)
var oPromise = new Promise(function (resolve,reject) {}); // resolve成功,reject失败
Promise.all(['对象1',对象2"]).then(function () {//对象1、对象2请求成功,执行}) // 对象1/2是异步就会等待数据回来在执行then,new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve(true) },1000) })
Promise.race(['对象1',对象2"]).then(function () {//对象1、对象2谁最快请求成功,执行})
Promise成功后,.then()可执行,根据resolve,reject函数状态
1. 封装一个get请求的方法
let url = 'http://wthrcdn.etouch.cn/weather_mini?citykey=101070101';
function getJSON(url) {
return new Promise(function(resolve, reject) {
var XHR = new XMLHttpRequest();
XHR.open('GET', url, true);
XHR.send();
XHR.onreadystatechange = function() {
console.log(XHR.status)
console.log(XHR.statusText)
if (XHR.readyState == 4) {
if (XHR.status == 200) {
try {
console.log(XHR.statusText)
var response = JSON.parse(XHR.responseText);
resolve(response);
} catch (e) {
reject(e);
}
} else {
reject(new Error(XHR.statusText));
}
}
}
})
}
getJSON(url).then(res => console.log(res));
---------------------
原文:https://blog.csdn.net/qq_29849641/article/details/69233788
function timeout(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms, 'done');
});
}
timeout(4000).then((value) => {
console.log(value);
});
2.回调 (以函数做为参导入另一个函数的等待调用)
3.定时器