是一个构造函数,new以后就会调用,然后里面有两个参数,其实也是函数()resolve, reject,resolve()以后会进入then的函数
reject()会进入catch的函数
<!DOCTYPE html>
<html lang="en">
<head>
<!-- <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> -->
<title>Document</title>
</head>
<body>
<div id="datetime"></div>
<script>
setInterval(
"document.getElementById('datetime').innerHTML=new Date().toLocaleString();",
1000
);
setTimeout(function () {
console.log("First");
setTimeout(function () {
console.log("Second");
setTimeout(function () {
console.log("Third");
}, 3000);
}, 4000);
}, 1000);
// Promise 构造函数只有一个参数,是一个函数,这个函数在构造之后会直接被异步运行,
// 所以我们称之为起始函数。起始函数包含两个参数 resolve 和 reject。
// 当 Promise 被构造时,起始函数会被异步执行:
// resolve 和 reject 都是函数,其中调用 resolve 代表一切正常,reject 是出现异常时所调用的
new Promise(function (resolve, reject) {
setTimeout(function () {
console.log("First");
resolve();
}, 1000);
})
.then(function () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log("Second");
resolve();
}, 4000);
});
})
.then(function () {
setTimeout(function () {
console.log("Third");
}, 3000);
});
// romise 类有 .then() .catch() 和 .finally() 三个方法,这三个方法的参数都是一个函数
new Promise(function (resolve, reject) {
var a = 0;
var b = 1;
if (b == 0) reject("Divide zero");
else resolve(a / b);
})
.then(function (value) {
console.log("a / b = " + value);
})
.catch(function (err) {
console.log(err);
})
.finally(function () {
console.log("End");
});
</script>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>系统时间</title>
</head>
<body>
<script>
function print(delay, message) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log(message);
resolve();
}, delay);
});
}
print(1000, "First")
.then(function () {
return print(4000, "Second");
})
.then(function () {
print(3000, "Third");
});
</script>
</body>
</html>