代码填空,并完成指定功能。
function sleep(time){
// 请写出你的代码
}
sleep(2000).then(()=>{
console.log("后续操作")
})
console.log(2);
目标 是让sleep 的功能与setTimeout一样:就是等2000毫秒之后再执行后续操作。
思路分析
- 首先.then要执行,sleep必须是一个promise对象
- 什么时候执行,2000毫秒后,那么第一反应是使用定时器,结束后返回某个值,让下面那行代码执行
- 最后执行代码
function sleep(time){
// 1、声明一个变量,用于储存promise对象
let p = new Promise(function(resolve,reject){
// 2、异步操作,根据执行结果,决定是否调用 resolve,reject
setTimeout(function(){
// 3、调用 resolve
resolve()
}, time)
})
//最后返回这个promise对象
return p
}
sleep(2000).then(()=>{
console.log("后续操作")
})
其实代码的难度并不难,最关键的是这个return,一定要记住返回这个promise对象回去,如果不返回则会报错
无法读取未定义的属性(读取“then”)
传参
function increment(value) {
return value + 1;
}
function doubleUp(value) {
return value * 2;
}
function output(value) {
console.log(value);// => (1 + 1) * 2
}
var p = Promise.resolve(1);
p.then(increment)
.then(doubleUp)
.then(output)
求打印的结果
思路分析
1、首先p的状态是resolved并传了一个参数1 2、在执行then的第一个参数时,将1传入
此时可以看到,我们已经将value改为1了,那么increment执行后的返回值就是2,p的状态是resolved等同于(fulfilled),promiseValue是2 ,所以还能继续执行.then
3、当执行doubleUp这个函数时,此时的value是2,p的状态是resolved,promiseValue的值为2,继续往下执行,如何查看p执行的状况,代码如下
检查后的结果为
此时可以很清晰的看到value的值为2,return返回的值是4
道理同上,最后执行的结果log打印为4