对于函数A,功能是异步获取用户数据,官方提供了success和fail。
现在有个需求,有时候函数A会单独执行而不需要在执行成功后执行B函数,而B函数又需要获取用户数据后在执行。
我现在给A函数设定了标记 gettingUserData用来标记函数A正在执行,那么对于函数B,如果函数A正在执行那么就不需要再次执行函数A,他只需要等待A函数成功执行然后再执行B自己需要的代码,这里就不知道怎么处理了。
希望能等待A执行完成后立即执行B自己的代码,本来使用while( !window.getUserData ){ }结果发现不行,该怎么处理呢。
function A( resolve, reject ){
var self = this
window.gettingUserData = true
sucess:{//异步执行(获取用户数据)
window.getUserData = true
resolve( )
},
fail:{
reject( )
}
}
function B( ){
var callBack = function( ){
//B函数需要执行的代码
}
var p = new Promise( A )
if( window.getUserData ){//如果用户数据已经获取了,那么执行函数B代码
callBack( )
}else{
if( !window.gettingUserData ){//A函数还没执行
p.then( callBack )
}else{//A函数正在执行
//等待A函数执行完成,A完成后立即执行自己的代码,怎么处理??
}
}
}
利用
Promise
状态一旦确定就不会更改的原则,只要是同一个Promise
就能完成你的需求。举个栗子