如果没有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
| 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)) .catch(error => console.error(error)); ;
|
1 2 3 4
| //result ☁ 5:54PM node_design_pattern node test.js 5 5
|