【发布时间】:2018-05-11 08:24:42
【问题描述】:
为了不在 Promise 回调中包装代码块(以节省一级缩进),有时我会执行以下操作:
function myFunction() {
// Create the promise object and get the "resolve" callback
let promiseResolve = null;
const promise = new Promise((resolve, reject) => {
promiseResolve = resolve;
});
// Then later in the code:
setTimeout(() => {
// Something slow
promiseResolve();
}, 1000);
// And at the end
return promise
}
它有效,但感觉有点乱。在 JavaScript 中是否有任何适当的模式可以做到这一点?
【问题讨论】:
-
是的,很乱。没有理由避免将执行解析的代码放在承诺执行器回调中。这就是它的归属。
-
如果你想保存一定程度的缩进,并且假设你不需要闭包,你总是可以将承诺体分解成一个单独的函数。
-
如果你想保存你的缩进级别,不要在
setTimeout回调中做复杂的逻辑,因为这里没有捕获到异常。而是使用return new Promise(resolve => setTimeout(resolve, 1000)).then(() => { /* something slow */ });
标签: javascript design-patterns callback promise