JavaScript不只承诺回调吗?

JavaScript不只承诺回调吗?,第1张

JavaScript不只承诺回调吗?

承诺不是回调。许诺代表 异步 *** 作未来结果
。当然,以您的方式编写它们,您会获得很少的收益。但是,如果按照使用它们的方式来编写它们,则可以以类似于同步代码的方式编写异步代码,并且更容易遵循:

api().then(function(result){    return api2();}).then(function(result2){    return api3();}).then(function(result3){     // do work});

当然,代码不会少很多,但可读性更高。

但这还不是终点。让我们发现真正的好处:如果您想检查任何步骤中的任何错误怎么办?用回调来做到这一点将是一件令人头疼的事,但是用promise却是小菜一碟:

api().then(function(result){    return api2();}).then(function(result2){    return api3();}).then(function(result3){     // do work}).catch(function(error) {     //handle any error that may occur before this point});

几乎与

try { ... } catch
街区相同。

更好的是:

api().then(function(result){    return api2();}).then(function(result2){    return api3();}).then(function(result3){     // do work}).catch(function(error) {     //handle any error that may occur before this point}).then(function() {     //do something whether there was an error or not     //like hiding an spinner if you were performing an AJAX request.});

更妙的是:如果这些3调用什么

api
api2
api3
可以同时运行(例如,如果他们是AJAX调用),但你需要等待三个?没有承诺,您应该必须创建某种计数器。使用ES6表示法的承诺,是又轻松又整洁的事情:

Promise.all([api(), api2(), api3()]).then(function(result) {    //do work. result is an array contains the values of the three fulfilled promises.}).catch(function(error) {    //handle the error. At least one of the promises rejected.});

希望您现在看到一个新的承诺。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4917347.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存