1 回答
![?](http://img1.sycdn.imooc.com/533e4c7b00013f3c02400205-100-100.jpg)
TA贡献1866条经验 获得超5个赞
您可以轻松实现这样的功能:
function yourXFunction(...args){
const cb=args.pop()
const cbCreator=i=>value=>{
if(done.add(i).size===args.length){
cb(value)
}
}
const done=new Set
args.map((fn,i)=>{
fn(cbCreator(i))
})
}
但请注意...
避免使用回调来支持 Promises(或者,甚至更好,async/ await)
由于 JS 的单线程性,竞相“异步”的事情可能会产生意想不到的结果
这是您的代码的承诺版本:
const wait = t => new Promise(rs => setTimeout(rs, t))
const async1 = () => wait(4000).then(()=>1)
const async2 = () => wait(6000).then(()=>13)
const async3 = () => wait(3000).then(()=>5)
function promisifiedYourXFunction(...args){
return new Promise(resolve=>{
const cbCreator=i=>value=>{
if(done.add(i).size===args.length){
resolve(value)
}
}
const done=new Set
args.map((fn,i)=>{
fn().then(cbCreator(i))
})
})
}
promisifiedYourXFunction(async1, async2, async3)
.then(console.log)
没有找到匹配的内容?试试慕课网站内搜索吧
添加回答
举报