您的位置:首页 > 大数据 > 人工智能

高级之路篇十八:setTimeout、Promise、async、await

2019-05-10 20:55 537 查看

setTimeout

setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。

[code]var timerId = setTimeout(func|code, delay)

clearTimeout(timerId);
timerId = null;

注意点:

1、定时器回调函数的this指向;

2、延迟执行时间受线程影响,时间不可能精确到指定的延迟时间。

3、必须要等到当前脚本的同步任务和“任务队列”中已有的事件,全部处理完以后,才会执行setTimeout指定的任务。

4、0毫秒实际上达不到的。根据HTML5标准,setTimeOut推迟执行的时间,最少是4毫秒。如果小于这个值,会被自动增加到4。这是为了防止多个setTimeout(f,0)语句连续执行,造成性能问题。

5、属于宏任务

 

Promise

Promise 对象用于表示一个异步操作最终状态(完成或失败),以及该异步操作的结果值

一个 

Promise
有以下几种状态:

  • pending: 初始状态,既不是成功,也不是失败状态。
  • fulfilled: 意味着操作成功完成。
  • rejected: 意味着操作失败。

方法:

1、Promise.all()

2、Promise.race()

3、Promise.resolve()

4、Promise.reject()

5、new Promise().then()    、 new Promise().catch()  、 new Promise().finally()

 

async

定义异步函数,函数执行返回一个Promise对象

当调用一个 

async
 函数时,会返回一个 
Promise
 对象。当这个 
async
 函数返回一个值时,
Promise
 的 resolve 方法会负责传递这个值;当 
async
 函数抛出异常时,
Promise
 的 reject 方法也会传递这个异常值。

[code]async function test(val){
return ++val;
}

//匿名异步函数
var test = async function(val){
return ++val;
}

 

 

await

用于等待一个

Promise
 对象。它只能在异步函数 
async function
 中使用。

[code][return_value] = await expression;

表达式expression

一个 

Promise
 对象或者任何要等待的值。

返回值return_value

返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。

[code]function p(val){
return new Promise(function(reslove, reject){
setTimeout(function(){
reslove(++val);
}, 3000)
})
}

async function test(val){

console.log(new Date().getTime());

val = await p(val);
return ++val;

}

test(3).then(function(val){

console.log(new Date().getTime());

console.log(val)

});

 

async异步函数与promise的区别优势

大多数异步函数也可以使用Promises编写为常规函数。但是,在错误处理方面,

async
 functions更不容易出错

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: