Javascript 承诺/回调混合函数
我在玩弄承诺和回调,想知道如果没有回调被传递,写一个返回承诺的函数的正确方法是什么 我的结果是这样的,但我不确定这是否正确(在反模式的意义上)Javascript 承诺/回调混合函数,javascript,promise,callback,Javascript,Promise,Callback,我在玩弄承诺和回调,想知道如果没有回调被传递,写一个返回承诺的函数的正确方法是什么 我的结果是这样的,但我不确定这是否正确(在反模式的意义上) const mySuperFunction=函数mySuperFunction(数据,cb){ 让包装器=新承诺((解决、拒绝)=>{ 设置超时(()=>{ 如果(Math.random()>=0.5){ 解析(Date.now()); }否则{ 拒绝(新错误(“不是今天…”); } }, 100); }); 如果(cb){ 包装器。然后((结果)=>
const mySuperFunction=函数mySuperFunction(数据,cb){
让包装器=新承诺((解决、拒绝)=>{
设置超时(()=>{
如果(Math.random()>=0.5){
解析(Date.now());
}否则{
拒绝(新错误(“不是今天…”);
}
}, 100);
});
如果(cb){
包装器。然后((结果)=>{
cb(空,结果);
},(错误)=>{
cb(错误);
});
}否则{
返回包装器;
}
};
mySuperFunction()。然后((时间)=>{
console.log(时间)
}).catch((错误)=>{
控制台日志(err);
});
mySuperFunction(空,(错误,时间)=>{
console.log(错误,时间)
});代码>
这样可以吗,还是我错过了一些特殊情况下,这不起作用
您的代码可以工作,但会增加无用的开销。承诺比回调占用更多内存,而且比回调慢
我会写这样的东西
const{promisify}=require('util'))
函数mySuperFunctionCallback(数据,cb){
设置超时(()=>{
如果(Math.random()>=0.5){
cb(Date.now())
}否则{
cb(新错误('不是今天…'))
}
}, 100)
}
const mysuperfunctionsync=promisify(mySuperFunctionCallback)
函数mySuperFunction(数据,cb){
如果(cb){
mySuperFunctionCallback(数据,cb)
}否则{
返回mySuperFunctionSync(数据)
}
}
mySuperFunction()。然后((时间)=>{
console.log(时间)
}).catch((错误)=>{
console.log(错误)
})
mySuperFunction(空,(错误,时间)=>{
console.log(错误,时间)
})
看起来不错。不过,我想把这些都转移到一个可重用的函数中。谢谢,但有一点我忘了提。当我可以直接将“extern”包装器/函数包含在函数中时,为什么要使用它?对我来说,你的例子比我的代码开销更大。我创建的2函数比你多。您正在为每个回调接口调用创建一个承诺:这是一个巨大的开销,如果您不信任我,您可能会用一个基准来误导它