使用Promises时,为什么不能在代码库的其他地方触发resolve和reject定义?
我不明白为什么resolve和reject逻辑应该在声明promise的地方进行本地化.这是一种疏忽,还是强制要求executor参数?
我相信执行程序函数应该是可选的,并且它的存在应该确定promise是否封装了解决方案.如果没有这样的要求,承诺将更加可扩展,因为您不必立即启动异步.承诺也应该是可以重置的.它是一个1开关,1或0,resolve()或reject().有迹象表明,可附接的并行和串行结果众多:promise.then(parallel1)和promise.then(parallel2)并且也promise.then(seq1).then(seq2)但参考特权玩家无法解析/拒绝到交换机
您可以在以后构建结果树,但不能改变它们,也不能改变根(输入触发器)
老实说,连续结果的树也应该是可编辑的.假设你想要拼出一个步骤并在你宣布许多承诺链之后做其他事情.重建承诺和每个顺序功能是没有意义的,特别是因为你甚至不能拒绝或毁掉承诺......
为了不在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中有没有适当的模式?