lau*_*ent 3 javascript design-patterns callback promise
为了不在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
}
Run Code Online (Sandbox Code Playgroud)
它有效,但感觉有点凌乱.在JavaScript中有没有适当的模式?
在JavaScript中有没有适当的模式?
是的,正确的模式是你显然要避免的.
function myFunction(data) {
return new Promise((resolve, reject) => {
// put code in here that calls resolve() or reject()
someAsyncOperation(data, function(err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
对于您正在展示的内容,实际上没有理由将执行器函数的范围外的resolve()或reject()处理程序分配.
以下是将代码保存在Promise执行程序中的一些好处:
.then()并.catch()要求.要使用Javascript编程,必须使用它并期望它.通常还需要访问父范围变量.util.promisify()或蓝鸟的Promise.promisifyAll().然后,我的逻辑流程完全是基于基于promise的操作,我甚至从未面对你展示的代码类型,任何编写这样的代码的诱惑也都消失了.一些参考:
如果您确实发现您认为"需要"Deferred对象,那么我建议您将该功能封装在一个新对象中并使用它,而不是每次使用它时手动编码.在我的所有编码中,我只发现代码使用Deferred对象更容易编写和更清洁,这是一个非常不寻常的低级别队列系统,可以管理一堆不同的任务.
有几个简单,简短的代码片段来实现Deferred对象.这是一个: