const sleep = (time) => {
return new Promise(resolve => setTimeout(resolve, time))
sleep(1000).then(() => {
// 这里写你的骚操作
x-power, yzhclear, rocky-191, HiroTang, fi3ework, Vikingama, dongtaotao, dora1988, xzzdll, AzronChan, and 70 more reacted with thumbs up emoji
jackcong, qq635030106, ItemLxL, l704863851, starry, qianhui119120, ChenCong6837, ihoneys, wulichenyang, ylinwind, and 3 more reacted with laugh emoji
coveyz, ylinwind, and Benborba-github reacted with rocket emoji
All reactions
const sleep = (time) => {
return new Promise(resolve => setTimeout(resolve, time))
async function sleepAsync() {
console.log('fuck the code')
await sleep(1000)
console.log('fuck the code again')
sleepAsync()
Moriarty02, suguoyao, yezongyang, LJJCherry, IronKinoko, hello-hyh, MoonCheung, zhujiasheng, csq529, Vikingama, and 49 more reacted with thumbs up emoji
rjwx60, 1039355201, RIN2333, liandao0815, croatialu, houchaowei, HuangShaoNan, zhihaoYoung, bettermu, millertiga, and 20 more reacted with laugh emoji
tiananxiao, 392237960, yuwangi, Straighty94, roooollo, eleven032, and 1322641861 reacted with rocket emoji
All reactions
//Promise
const sleep = time => {
return new Promise(resolve => setTimeout(resolve,time))
sleep(1000).then(()=>{
console.log(1)
//Generator
function* sleepGenerator(time) {
yield new Promise(function(resolve,reject){
setTimeout(resolve,time);
sleepGenerator(1000).next().value.then(()=>{console.log(1)})
//async
function sleep(time) {
return new Promise(resolve => setTimeout(resolve,time))
async function output() {
let out = await sleep(1000);
console.log(1);
return out;
output();
//ES5
function sleep(callback,time) {
if(typeof callback === 'function')
setTimeout(callback,time)
function output(){
console.log(1);
sleep(output,1000);
Promise | 自个写一个Promise | Generator
JonathonChen, yygmind, bohancen, Ray-56, shifengdiy, jerryjiao, nomoreyou, DannySu09, kdashl, rjwx60, and 130 more reacted with thumbs up emoji
BFjacky, ZengHaiTao1, brilliant-js, and everzi reacted with thumbs down emoji
dousongting and oolongstack reacted with laugh emoji
lizengguangxx, dousongting, and skadieyes reacted with hooray emoji
lizengguangxx, dousongting, and Chanjunj99 reacted with heart emoji
zhangwellyear, bulingTang, lizengguangxx, dousongting, Chocolate1999, and oolongstack reacted with rocket emoji
All reactions
const sleep = (time) => {
return new Promise((resolve, reject) => {
setTimeout(resolve, time);
});
sleep(1000).then(() => {
console.log('sleep end');
});
大家在工作中是使用Promise最多吗
function sleep(time) {
function* gen () {
yield new Promise((resolve,
reject) => {
setTimeout(() => {
resolve()
}, time)
return gen().next().value;
sleep(1000).then(() => {
console.log('sleep end');
});
console.log("11111111111111111111111111111");
await sleep1(1000);
console.log("222222222222222222222222222222");
sleep2(1000);
console.log("333333333333333333333333333333");
exec();
* DailyIssue42:
42:实现一个 sleep 函数,
比如 sleep(1000) 意味着等待1000毫秒,可从 Promise、Generator、Async/Await 等角度实现:
// Promise:
*https://blog.csdn.net/ImagineCode/article/details/81089107
let sleep={
// sleep in promise;
sleepInPromise:function(delayTime){
return new Promise((resolve,reject)=>{
setTimeout(function () {
resolve('do something in promise');
},delayTime)
sleepInGenerator:function *(delayTime){
yield new Promise(function(resolve,reject){
setTimeout(function(){
resolve('do in generator');
},delayTime);
sleepInES5:function(callback,delayTime){
if( typeof callback==='function'){
setTimeout(()=>{
callback();
},delayTime);
// 执行函数;
function doSomeThing(){
console.log('sleepInES5');
sleep.sleepInES5(doSomeThing,1000);
// 执行函数
sleep.sleepInPromise(1000)
.then(function (res) {
console.log(res);
.catch(function (err) {
console.log(err);
// 执行函数
sleep.sleepInGenerator(1000).next().value
.then(res=>{
console.log(res);
// async 函数声明;
async function sleepAsync(delayTime){
let result;
result= await sleep.sleepInPromise(delayTime);
}catch(e){
console.log(e);
console.log(result);
// 执行函数
sleepAsync(1000);
function sleep(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(time)
}, time)
sleep(5000).then((time) => { console.log(`你睡了${time / 1000}s,然后做你的事情`) })
// 方法二
function async sleep2(time) {
await sleep(time)
// then do you thing
console.log(`你睡了${time / 1000}s,然后做你的事情`)
// async 函数返回的是一个promise对象
// 方法三
// 通过generator 还是返回一个promise,这个不知道具体的意义,这和返回一个普通的promise有区别么
function* sleep3(time) {
yield new Promise(resolve => {
setTimeout(resolve, time)
sleep3(5000).next().value.then(() => { console.log("睡了一会儿,然后做你做的事情")})
// 方法四
// 通过传统的setTimeout去做
function sleep4(func, time) {
setTimeout(func, time)
function sleep (time) {
var now = +Date.now()
while (+Date.now() - now <= time) {}
return
console.time(1)
sleep(2000)
console.log(123)
console.timeEnd(1)
console.time(1)
sleep(3000)
console.log(456)
console.timeEnd(1)
// 123
// 2000.244140625ms
// 456
// 3001.861328125ms
formattedzzz, ahabhgk, liwangyong, pan-Z2l0aHVi, coldantLian, binghong-chen, and hanzehua666 reacted with thumbs up emoji
WindyNanzi, glbb666, formattedzzz, justsoup, and Mixlong reacted with eyes emoji
All reactions
ahabhgk, wuzhenquan, formattedzzz, hcl-z, Chester-Chen, vanishcode, miyukoarc, willysliang, and hanzehua666 reacted with thumbs down emoji
Esdiarap reacted with laugh emoji
All reactions
//1. Promise
const sleep1 = time => new Promise(resolve => setTimeout(resolve, time));
//2.without Promise
const sleep2 = time => ({
then: cb => {
setTimeout(cb, time);
});
//3. Generator, without Promise code
const sleep3 = time => {
function* gen() {
yield {
then: cb => {
setTimeout(cb, time);
return gen().next().value;
//4. async/await without Promise code and Generator
const sleep4 = async time=>{
await sleep2(time);
//call
(async ()=>{
console.time('sleep1');
await sleep1(1000);
console.timeEnd('sleep1');
console.time('sleep2');
await sleep2(1000);
console.timeEnd(
'sleep2');
console.time('sleep3');
await sleep3(1000);
console.timeEnd('sleep3');
console.time('sleep4');
await sleep4(1000);
console.timeEnd('sleep4');
})();
//typeof callback === "hell"
function timeout (time) {
return new Promise(function(res,rej){
setTimeout(res,time)
async function sleep (time) {
console.log(1)
await timeout(time)
console.log(2)
//回调函数实现
const sleepCb = (wait, cb) => setTimeout(cb, wait);
sleepCb(5500, () => {
console.log("cb");
});
Promise
const sleep = wait => new Promise(resolve => setTimeout(resolve, wait));
sleep(1500).then(res => {
// sleep 之后干的事
console.log("sleep");
});
Generator
基于 promise
function* sleep2(wait) {
yield new Promise(resolve => setTimeout(resolve, wait));
sleep2(2500)
.next()
.value.then(() => {
// sleep 之后干的事
console.log("sleep2");
});
async/await
基于 promise
async function sleep3(wait) {
await new Promise(resolve => {
setTimeout(resolve, wait);
});
sleep3(3500).then(() => {
console.log("sleep3");
});
function sleep(duration){
startTime = Date.now();
while ( Date.now() - startTime < duration );
sleep(3000);
console.info("sleeped 3sec!")
//Promise
const sleep = time => {
return new Promise(resolve => setTimeout(resolve,time))
sleep(1000).then(()=>{
console.log(1)
//Generator
function* sleepGenerator(time) {
yield new Promise(function(resolve,reject){
setTimeout(resolve,time);
sleepGenerator(1000).next().value.then(()=>{console.log(1)})
//async
function sleep(time) {
return new Promise(resolve => setTimeout(resolve,time))
async function output() {
let out = await sleep(1000);
console.log(1);
return out;
output();
//ES5
function sleep(callback,time) {
if(typeof callback === 'function')
setTimeout(callback,time)
function output(){
console.log(1);
sleep(output,1000);
Promise | 自个写一个Promise | Generator
其实都是 promise
function sleep(wait) {
let date = new Date().getTime();
console.log('wait...')
while ((new Date().getTime()) - date < wait) {
continue;
var sloop=function(time){
return new Promise(function (resolve, reject) {
setTimeout(function(){
resolve(time)
},time)
sloop(1000).then(function (value) {
console.log(value)
~~~ 虽然我是菜鸟,但我还是要记录一下我的答案
let sleep = function (time){
return new Promise((resolve,reject)=>{
setTimeout(resolve,time)
sleep(1000).then(res=>{
//do something
async function sleep(time) {
await new Promise(resolve => {
setTimeout(resolve, time)
// do something
...
generator
function * sleep (time) {
yield new Promise(resolve => {setTimeout(resolve, time)})
sleep(1000).next().value.then(() => {
console.log('已经等待1s')
promise:
const sleep1 = (time)=>{ return new Promise((resolve)=>{ setTimeout(resolve, time) }) } sleep1(1000).then(()=>{ console.log(1) })
async/awiat:
const sleep1 = (time)=>{ return new Promise((resolve)=>{ setTimeout(resolve, time) }) } async function output(){ await sleep1(1000) console.log(1) } output()
generator:
function* gen(time) {
yield new Promise(function(resolve,reject){
setTimeout(resolve,time);
gen(1000).next().value.then(()=>{console.log(1)})
什么是sleep? 什么实现用Promise 或是 async await的方法和setTimeout有本质上的区别吗? sleep不应该用代码的方式 阻塞住进程,让他啥也干不了吗?
function sleep(time){
let currentTime=Date.now();
while(Date.now()-currentTime<=time){
return;
console.log("aaa")
sleep(5000);
console.log("bbb")
sleep(1000);
console.log('sleep之后做的事');
后来实在想不出来怎么实现,看了大家的答案,发现是我想多了,,确实没法实现这样的sleep
用while一直循环,直到时间到退出循环那个是真sleep啊
const sleep = (time) => {
return new Promise(resolve => setTimeout(resolve, time))
sleep(1000).then(() => {
// 这里写你的骚操作
我为什么不直接settimeout呢,还要包一下
function sleep(time, callback){
if(typeof callback === "function"){
setTimeout(callback, time);
sleep(1000, function(){
console.log("1");
Promise
const sleep = time => {
return new Promise(resolve => setTimeout(resolve, time));
sleep(1000).then(() => console.log("1"));
Generator
function* sleepGenerator(time){
yield new Promise(resolve => setTimeout(resolve, time));
const sleep = time => sleepGenerator(time).next().value;
sleep(1000).then(() => console.log("1"));
await/async(做了改动)
async function sleep(time){
await new Promise(resolve => {
setTimeout(resolve, time);
sleep(1000).then(() => console.log("1"));
async function sleep(time){
await new Promise(resolve => {
setTimeout(resolve, time);
console.log("1");
sleep(1000);
function sleep (time) {
var now = +Date.now()
while (+Date.now() - now <= time) {}
return
console.time(1)
sleep(2000)
console.log(123)
console.timeEnd(1)
console.time(1)
sleep(3000)
console.log(456)
console.timeEnd(1)
// 123
// 2000.244140625ms
// 456
// 3001.861328125ms
这种方式会阻塞代码的
// Promise
function sleep(seconds) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(); }, seconds); }) }
// generator
function* sleep(fn, seconds) { yield setTimeout(() => { fn.call(null); }, seconds); } sleep(demo,1000).next()
function demo() { console.log('233'); }
// async await
async function sleep(fn, seconds) { await setTimeout(() => { fn.call(null); }, seconds); } sleep(demo,1000)
不对之处,请指出一起讨论,谢谢
Promise:
function sleepForPromise(delay) {
return new Promise(res => setTimeout(res, delay));
sleepForPromise(1000).then(con);
Generator:
function* sleepForGenerator(fn, delay) {
yield setTimeout(() => {
fn();
}, delay);
var g = sleepForGenerator(con, 1000);
g.next();
Async/Await:
async function sleepForAsyncAwait(fn,delay) {
await new Promise(res => setTimeout(res, delay));
fn();
sleepForAsyncAwait(
con ,1000);
sleep(1000);
console.log('sleep之后做的事');
后来实在想不出来怎么实现,看了大家的答案,发现是我想多了,,确实没法实现这样的sleep
是啊,这题出的就有问题,直接setTimeout不好嘛,为啥还要加这么多花里胡哨的
const s = sleep2(1500);
s.next().value.then(() => console.log("sleep2"));
// Async/Await
async function sleep3(time) {
await sleep1(time);
(async () => {
await sleep3(2000);
console.log("sleep3")
})()
function sleep(ms) {
return new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve();
}, ms)
// promise
sleep(1000).then(()=>{
console.log('1000ms after');
// async / await
async function main() {
await sleep(1000);
console.log('1000ms after');
// generator
function* main() {
yield sleep(1000);
main().next().value.then(()=>{
console.log('1000ms after');
// generator co
function co (generator) {
const gen = generator();
function cb (param) {
let tmp = gen.next(param);
if (tmp.done) return Promise.resolve(tmp.value);
tmp.value.then((ret)=>{
cb(ret)
});
cb();
function* main() {
yield sleep(1000);
console.log('1000ms after');
yield sleep(1000);
console.log('2000ms after');
co(main);
// 回调
const sleep = (time, cb) => setTimeout(cb, time)
sleep(1000, () => console.log('开始搞事情~'))
// Promise
const sleep = (time) => {
return new Promise((re, rj) => {
setTimeout(re, time)
sleep(1000).then(() => console.log('开始搞事情~'))
// Generator
const gen = function* (time) {
console.log('开始搞事情~')
const sleep = (gen, time) => {
let g = gen()
setTimeout(() => g.next(), time)
sleep(gen, 1000)
// async/await
const sleep= async (time) => {
await new Promise((re, rj) => {
setTimeout(re, time)
console.log('开始搞事情~')
sleep(1000).then(() => console.log('或者这样搞事情~'))
function sleep(interval) {
return new Promise((resolve, reject) => {
let timer
const now = Date.now
let startTime = now()
let endTime = startTime
const loop = () => {
timer = window.requestAnimationFrame(loop)
endTime = now()
if (endTime - startTime >= interval) {
window.cancelAnimationFrame(timer)
resolve()
timer = window.requestAnimationFrame(loop)
sleep(2000).then(() => {
// ...
console.log('hello world!')
可能会比setTimeout精确一点点
function sleep(callback,time) {
if(typeof callback === 'function')
setTimeout(callback,time)
function output(){
console.log(1);
sleep(output,1000);
* [Promise | 自个写一个Promise | Generator](https://blog.csdn.net/ImagineCode/article/details/81089107)
前几个方法都很棒,就这个ES5的咋感觉就是用setTimout实现了个setTimeout😂