defer()promise和Promise之间的区别

如何解决defer()promise和Promise之间的区别?
好吧,这是关于承诺解决方案源的。Q和其他许多库提供两个API:

您可以在其中创建一个递延函数,.resolve(value) 并承诺可以返回。
-这是现代API,您可以在其中从完成源创建Promise。
粗略地做:

var d = Q.defer();
setTimeout(function(){ d.resolve(); }, 1000);
return d.promise;
是相同的:

return new Promise(function(resolve, reject){
setTimeout(resolve, 1000);
});
所以你可能会问

为什么我们需要两个API?
好吧,延迟API是第一个。这是其他语言处理它的方式,论文是处理它的方式,也是人们首先使用它的方式- 但是,这两个API之间存在重要区别。Promise构造函数很安全。

投掷安全
承诺抽象异常处理,并且是安全的。如果将一个promise链放入其中,它将引用该规范将该异常转换为拒绝。

如果onFulfilled或onRejected抛出异常e,则必须以e为理由拒绝promise2

假设您正在从XHR请求中解析JSON:

function get(){
var d = Q.defer();
if(cached) { // use cached version user edited in localStorage
d.resolve(JSON.parse(cached));
} else { // get from server
myCallbackApi('/foo', function(res){ d.resolve(res); });
}
}
现在,让我们看一下promise构造器的版本:

function get(){
return new Promise(function(resolve, reject){
if(cached) { // use cached version user edited in localStorage
resolve(JSON.parse(cached));
} else { // get from server
myCallbackApi('/foo', resolve);
}
});
}
现在,假设服务器以某种方式向您发送了无效的JSON(或用户将其编辑为无效状态)并进行了缓存。

在延迟版本中-它是同步抛出的。因此,您通常必须谨防。在底部版本中则没有。最高版本的用法如下所示:

try{
return get().catch(function(e){
return handleException(e); // can also just pass as function
});
} catch(e){
handleException(e);
}
在底部版本中-promise构造函数会将throws 转换为拒绝,因此足以执行此操作:

return get().then(function(e){
return handleException(e);
});
防止发生一整类程序员错误。

解决方法
我知道defer分隔诺言状态的控制和过程,这里以Q为例,返回的诺言Q.defer().promise和Q.Promise完全不同,为什么这样设计?这两个“承诺”有什么区别
声明:地推任务网所有作品(图片、文字)均由用户自行上传分享,仅供网友学习交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dituirenwu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值