我已经使用 JS 工作了一段时间,在阅读了很多关于回调、 promise 以及现在广受好评的 async/await 的内容之后(恕我直言,这实际上是使用 promise 的更优雅的方式),所以我想知道是否异步函数可以在特定条件下处理回调调用和返回 Promise。
我正在考虑一个有点这样的函数
function division (dividend, divisor, callback) {
if (divisor === 0) {
const err = new Error('Can not divide by zero')
if (callback) callback(err, null)
else return new Promise.reject(err)
} else {
if (callback) callback(null, (dividend/divisor))
else return new Promise.resolve(dividend/divisor)
}
}
那么就可以用两种方式调用
division(10, 2, (err, result) => {
if (err) console.log('Ops!')
else console.log(result)
})
或
division(10, 2)
.then((result) => {
console.log(result)
}).catch((err) => {
console.log(err)
})
这个想法会以某种方式起作用吗?
如果某种方式有效,以这种风格实现函数会是一个好主意吗?
如果某种方式有效并且是个好主意,它可以改进吗?
提前致谢!我真的很喜欢研究语言机制,这是提高自己对任何事物的标准思维的好方法。
最佳答案
所有的 Google API 都是这样实现的。例如这里:https://cloud.google.com/nodejs/docs/reference/compute/0.10.x/Zone#get
If the callback is omitted, we'll return a Promise.
关于javascript - 函数可以在正确的情况下自动调用回调或返回 promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51850306/