javascript - 函数可以在正确的情况下自动调用回调或返回 promise 吗?

标签 javascript node.js ecmascript-6

我已经使用 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/

相关文章:

javascript - Backbone 一对多关系

node.js - Jade.escape 在已编译的 Jade 模板上未定义

javascript - "then"编译成什么,以便它在旧浏览器中工作?

javascript - 如何在 Worker 中导入/使用 Immutable.js

inheritance - 如何在 React 组件和 es6 类中使用继承

JavaScript Alert Selected Option of html 下拉列表

javascript - 如何将数组对象保存到 Chrome 本地存储中

javascript - 在构造函数中定义函数会比将其附加到原型(prototype)消耗更多的内存吗?

javascript - 数组不能访问元素?

javascript - 如何排序导致 nodejs - mongodb 搜索,但是,通过调用动态方法