Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有必要在函数中封装承诺吗? 我有这样的情况: 从“./helpers/processAsyncCall”导入processAsyncCall; const promiseWrapper=()=>新承诺((res,rej)=>{/*[1]*/}); const onResolve=()=>{/*[2]*/}; 分派(processAsyncCall(promiseWrapper,onResolve)); promiseWrapper包含一个承诺,该承诺将在执行某个操作时解析(例如:获取文件、更新内容等) 当promiseWrapper中的promise已解析时,将调用此方法_Javascript_Redux_Promise - Fatal编程技术网

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回调,那么承诺就失效了”-不,一点也不。承诺不会消失。解析它们时,它们将进入已解析状态。你可以进来