Promise提供三种唯一的状态:
Pending- promise的结果尚未确定,因为将产生其结果的异步操作尚未完成。
Fulfilled- 异步操作已完成,并且promise有值。
Rejected- 异步操作失败,promise永远不会实现。在被拒绝状态下,promise有一个reason可以指示操作失败的原因。
当promise在pending状态时,它可以转换为fulfilled或rejected的状态。然而,一旦promise得到fulfilled或rejected,它将永远不会过渡到任何其他状态,其value或失败原因不会改变。
async/await
const makeRequest =()=>
getJSON() .then(data=>{
console.log(data);
return"done";
})
makeRequest();
const makeRequest =async() => {
console.log(await getJSON())
return"done";
}
使用async/await,在主体函数之前使用了async关键字。在函数体内,使用了await关键字。await关键字只能出现在用async声明的函数体内。该函数会隐式地返回一个Promise对象,函数体内的return值,将会作为这个Promise对象resolve时的参数
makeRequest()
function timeout(ms){
returnnewPromise((resolve) =>{
setTimeout(resolve, ms);
});
}
async functionasyncPrint(value, ms){
awaittimeout(ms);
console.log(value);
}
asyncPrint('hello world',50);
//上面代码指定50毫秒以后,输出hello world
const makeRequest =()=>{
return promise1() .then(value1=>{
// do something
return promise2(value1) .then(value2=>{
// do something
return promise3(value1, value2) })
})
}
const makeRequest = async() => {
const value1 =await promise1();
const value2 =await promise2(value1);
return promise3(value1, value2);
}