【发布时间】:2020-09-18 09:13:32
【问题描述】:
我正在玩弄 Promise 和回调,想知道如果没有通过回调,编写一个返回 Promise 的函数的正确方法是什么。
我的结果看起来像这样,但我不确定这是否正确(反模式的意思)
const mySuperFunction = function mySuperFunction(data, cb) {
let wrapper = new Promise((resolve, reject) => {
setTimeout(() => {
if (Math.random() >= 0.5) {
resolve(Date.now());
} else {
reject(new Error("Not today..."));
}
}, 100);
});
if (cb) {
wrapper.then((result) => {
cb(null, result);
}, (error) => {
cb(error);
});
} else {
return wrapper;
}
};
mySuperFunction().then((time) => {
console.log(time)
}).catch((err) => {
console.log(err);
});
mySuperFunction(null, (err, time) => {
console.log(err, time)
});
它很简单:创建一个函数并将“工作”代码包装在一个 Promise 中。
如果没有回调传递给我的函数,我返回包装好的承诺。如果通过了回调,我会从 .then(...) 和 .catch(...) 包装/调用它
这样可以吗,还是我错过了一些不起作用的特殊情况?
【问题讨论】:
-
看起来不错。不过,我会将所有这些都转移到可重用的函数中。
标签: javascript promise callback