Promise 中 setTimeout 的使用

先看一段代码

你能说出下面两段代码的结果差异和原因吗?

function getData() {
	return new Promise((resolve, reject) => {
	  setTimeout(resolve('hello'), 2000)
	})
}
getData().then(res => {
  console.log(res)
})
// 立马输出 hello
// code2

function getData() {
	return new Promise((resolve, reject) => {
	  setTimeout(resolve, 2000, 'hello')
	})
}
getData().then(res => {
  console.log(res)
})
// 2s后输出hello

其实呢,这个差异就是 func()func 的区别,setTimeout 的第一个参数是 func,如果用 func() 相当于其返回值为第一个参数。

这个地方应该是一个函数 func ,如果你传的是 func() ,代码解析器执行到此处的时候,就会立即执行这个函数,起不到延时的效果了。

常见的使用场景

实现一个 sleep 函数

// 1s 后执行的代码
const sleep = (time) => {
  return new Promise(resolve => setTimeout(resolve, time))
}

sleep(1000).then(() => {
  // 这里写你的操作
})
// 代码延时
const sleep = (time) => {
  return new Promise(resolve => setTimeout(resolve, time))
}

async function sleepAsync() {
  console.log('1')
  let res = await sleep(1000)
  console.log('2')
  return res
}

sleepAsync()

-------------------(正文完)---------------------------
一个前端的学习交流群,想进来面基的,可以点击这个logo ➹Vue学习交流,或者手动search群号:685486827832485817


写在最后: 约定优于配置-------软件开发的简约原则
-------------------------------- (完)--------------------------------------

我的:
个人网站: https://neveryu.github.io/neveryu/
Github: https://github.com/Neveryu
新浪微博: https://weibo.com/Neveryu

更多学习资源请关注我的新浪微博…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值