Javascript 有必要在函数中封装承诺吗? 我有这样的情况: 从“./helpers/processAsyncCall”导入processAsyncCall; const promiseWrapper=()=>新承诺((res,rej)=>{/*[1]*/}); const onResolve=()=>{/*[2]*/}; 分派(processAsyncCall(promiseWrapper,onResolve)); promiseWrapper包含一个承诺,该承诺将在执行某个操作时解析(例如:获取文件、更新内容等) 当promiseWrapper中的promise已解析时,将调用此方法
让我们看看Javascript 有必要在函数中封装承诺吗? 我有这样的情况: 从“./helpers/processAsyncCall”导入processAsyncCall; const promiseWrapper=()=>新承诺((res,rej)=>{/*[1]*/}); const onResolve=()=>{/*[2]*/}; 分派(processAsyncCall(promiseWrapper,onResolve)); promiseWrapper包含一个承诺,该承诺将在执行某个操作时解析(例如:获取文件、更新内容等) 当promiseWrapper中的promise已解析时,将调用此方法,javascript,redux,promise,Javascript,Redux,Promise,让我们看看processAsyncCall 导出默认值( 允诺人, onResolve=null, )=>(调度,获取状态)=>{ 调度(showLoading()); 允诺人 。然后(结果=>{ if(onResolve!==null&&typeof onResolve==“函数”){ onResolve(调度、获取状态)(结果); } }) .catch(()=>console.log(“异步中的错误”) .最后(()=>dispatch(hideLoading()); }); }; 重要
processAsyncCall
导出默认值(
允诺人,
onResolve=null,
)=>(调度,获取状态)=>{
调度(showLoading());
允诺人
。然后(结果=>{
if(onResolve!==null&&typeof onResolve==“函数”){
onResolve(调度、获取状态)(结果);
}
})
.catch(()=>console.log(“异步中的错误”)
.最后(()=>dispatch(hideLoading());
});
};
重要的部分是promiseWrapper()。然后(result=>{/*…*/})
我执行函数promiseWrapper
,当场创建承诺
我的问题: 是否有必要在函数中封装承诺,以确保在处理承诺之前它未被解析 我遇到了这样一个问题,如果我将我的承诺作为一个参数直接传递,那么
然后
回调将不起作用
dispatch(processAsyncCall(新承诺(/*…*/),/*…*/);
我的理解是,当一个承诺解决时,,然后调用回调。但是,如果函数解析并且没有,那么此时
回调,则承诺完成/终止
请记住,上面的示例非常简单,但在某些情况下,承诺是在其他地方创建的,它会一直传递下去,直到到达processAsyncCall
函数
我的理解是,当承诺解决时,调用回调。但是,如果函数解析,并且当时没有then回调,则承诺完成/完成/失效
这是不正确的。根据定义,代码无法知道承诺将在何时解析,并且要求代码在解析之前附加回调将对承诺造成相当大的限制,并使它们变得不那么有用。否,您可以随时附加一个新回调,它将被调用:
const p=新承诺(r=>{
r('yay');
setTimeout(()=>p.then(console.log));
});
p、 然后(console.log)代码>
我的理解是,当承诺解决时,调用回调。但是,如果函数解析,并且当时没有then回调,则承诺完成/完成/失效
这是不正确的。根据定义,代码无法知道承诺将在何时解析,并且要求代码在解析之前附加回调将对承诺造成相当大的限制,并使它们变得不那么有用。否,您可以随时附加一个新回调,它将被调用:
const p=新承诺(r=>{
r('yay');
setTimeout(()=>p.then(console.log));
});
p、 然后(console.log)代码>我觉得承诺行为在你的脑海中仍然有点神秘
您可以将承诺想象为具有4个属性的对象:
- 一个国家
- 一个价值,
- 成功时将调用的回调列表
- 失败时要调用的回调的列表
状态
总是从挂起
开始,承诺中的代码被堆叠起来,以便在下一个执行循环中调用,就像您使用setImmediate
调用它一样
承诺只能解决或拒绝一次,此后将永远保持这种状态
当承诺被解析/拒绝时,其状态更改为已履行
或已拒绝
,并依次调用相应的回调
当您对承诺调用然后
或catch
时,如果承诺的状态为挂起
,则回调将添加到相应的列表中。如果承诺已经被解析(分别被拒绝),那么回调将在下一个执行循环中调用
我希望它能帮助你理解这里发生的事情。我觉得承诺行为在你的脑海中仍然有点神秘
您可以将承诺想象为具有4个属性的对象:
- 一个国家
- 一个价值,
- 成功时将调用的回调列表
- 失败时要调用的回调的列表
状态
总是从挂起
开始,承诺中的代码被堆叠起来,以便在下一个执行循环中调用,就像您使用setImmediate
调用它一样
承诺只能解决或拒绝一次,此后将永远保持这种状态
当承诺被解析/拒绝时,其状态更改为已履行
或已拒绝
,并依次调用相应的回调
当您对承诺调用然后
或catch
时,如果承诺的状态为挂起
,则回调将添加到相应的列表中。如果承诺已经被解析(分别被拒绝),那么回调将在下一个执行循环中调用
我希望它能帮助您理解这里发生了什么。“我执行函数promiseWrapper
,当场创建承诺。”-您不想在分派(showLoading())
后执行创建承诺的操作吗?“如果函数解析,并且当时没有then回调,那么承诺就失效了”-不,一点也不。承诺不会消失。解析它们时,它们将进入已解析状态。你可以进来