gpt4 book ai didi

javascript - 改进处理 promise 内部回调的方法

转载 作者:行者123 更新时间:2023-11-30 14:24:36 24 4
gpt4 key购买 nike

我有以下在 promises 中使用 callbacks 的代码:

const clue = 'someValue';

const myFunction = (someParam, callback) => {
someAsyncOperation(someParam) // this function returns an array
.then((array) => {
if (array.includes(clue)){
callback(null, array); // Callback with 'Success'
}
else{
callback(`The array does not includes: ${clue}`); // Callback with Error
}
})
.catch((err) => {
// handle error
callback(`Some error inside the promise chain: ${err}`) // Callback with Error
})
}

并这样调用它:

myFunction (someParam, (error, response) => {
if(error) {
console.log(error);
}
else {
// do something with the 'response'
}
})

阅读一些文档,我发现有一些改进的方法可以做到这一点:

const myFunction = (someParam, callback) => {
someAsyncOperation(someParam) // this function returns an array
.then((array) => {
if (array.includes(clue)){
callback(array);
}
else{
callback(`The array does not includes: ${clue}`);
}
}, (e) => {
callback(`Some error happened inside the promise chain: ${e}`);
})
.catch((err) => {
// handle error
callback(`Some error happened with callbacks: ${err}`)
})
}

我的问题:

从性能或最佳实践的 Angular 来看,可以在 promise 中调用 'callback' 函数 两种方式显示或者我做错了什么,我的意思是一些 promise anti-模式方式?

最佳答案

这看起来真的很倒退,并且剥夺了 promise 管理错误并将错误传递到链中的好处

从函数返回异步 promise ,不要用回调中断它。然后在链的末尾添加一个catch

const myFunction = (someParam) => {
// return the promise
return someAsyncOperation(someParam) // this function returns an array
.then((array) => {
return array.includes(clue) ? array : [];
});
}

myFunction(someParam).then(res=>{
if(res.length){
// do something with array
}else{
// no results
}
}).catch(err=>console.log('Something went wrong in chain above this'))

关于javascript - 改进处理 promise 内部回调的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com