async函數(shù)是generator函數(shù)的語(yǔ)法糖,但對(duì)generator進(jìn)行了改進(jìn),其中最方便的一點(diǎn)就是async返回一個(gè)promise對(duì)象,在實(shí)際項(xiàng)目中,await后面要跟一個(gè)promise對(duì)象痰滋,
而async函數(shù)又返回一個(gè)promise對(duì)象,所以可以很方便地劃分模塊壤蚜,個(gè)人認(rèn)為async是目前回調(diào)函數(shù)最好的解決辦法
普通函數(shù)轉(zhuǎn)換為promise:
var changeToPromise = function(){
var argument = arguments , _this = this
return new Promise(function(resolve,reject){
var fun = Array.prototype.shift.call(argument)
Array.prototype.push.call(argument,function(err,data){
if(err){
reject(err)
}else{
var d = data || undefined
resolve(d)
}
})
fun.apply(_this,argument)
})
}
在用的時(shí)候可以通過(guò)call來(lái)指定外部的this(因?yàn)樾枰D(zhuǎn)換的方法內(nèi)部調(diào)用了this)
var parent = async function(){
var obj = {
someProperty,
someFunction? ? ? // 某個(gè)異步方法即寡,返回一個(gè)值data
}
var re = await changeToPromise.call(obj,obj.someFunction)
}
一般情況可以直接使用 changeToPromise,無(wú)需call