Api for both promise or callback

如果没有callback参数就直接resolve或者reject,如果有callback参数就执行callback,然后resove或者reject。 于是我们看到当我们带上callback,然后又用then去chain promise的时候就返回了两次结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// divid.js
module.exports = function asyncDivision (dividend, divisor, cb) {
return new Promise((resolve, reject) => {
process.nextTick(() => {
const result = dividend / divisor;
if (isNaN(result) || !Number.isFinite(result)) {
const error = new Error('Invalid operands');
if (cb) { cb(error); }
return reject(error);
}
if (cb) { cb(null, result); }
resolve(result);
});
});
};

1
2
3
4
5
6
7
8
9
10
11
12

let asyncDivision = require('./divid')

asyncDivision(10, 2, (error, result) => {
if (error) {
return console.error(error);
}
console.log(result);
})
.then(result => console.log(result)) // [1]
.catch(error => console.error(error)); // [2]
;
1
2
3
4
//result
☁ 5:54PM node_design_pattern node test.js
5
5
如果你觉得本文对你有帮助,请给我点赞助。