首页 > 编程 > JavaScript > 正文

举例详解JavaScript中Promise的使用

2019-11-02 15:53:08
字体:
来源:转载
供稿:网友

   这篇文章主要介绍了JavaScript中Promise的使用,特别jQuery的promise使用是当下开发圈中的热门,需要的朋友可以参考下

  摘录 – Parse Java

文艺网名[www.la240.com/html2017/1/33/]
Script SDK现在提供了支持大多数异步方法的兼容jquery的Promises模式,那么这意味着什么呢,读完下文你就了解了。

  “Promises” 代表着在javascript程序里下一个伟大的范式,但是理解他们为什么如此伟大不是件简单的事。它的核心就是一个promise代表一个任务结果,这个任务有可能完成有可能没完成。Promise模式唯一需要的一个接口是调用then方法,它可以用来注册当promise完成或者失败时调用的回调函数,这在CommonJS Promises/A proposal.大体讲到了。比如,我想保存一个Prase.Object对象,这是个异步操作,在旧的回调范式中,你的代码可能这样写:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 object.save({ key: value }, { success:function(object) { // the object was saved. }, error:function(object, error) { // saving the object failed. } }); 在新的Promise范式中,同样的代码你可以这样写:   object.save({ key: value }).then( function(object) { // the object was saved. }, function(error) { // saving the object failed. });

  没有多大的区别?那么有啥大不了的地方呢?好吧,promises的真正强大之处在于多重的链接,当调用promise.then(func)时返回一个新的promise,它不会执行直到上一个完成。但是这里有一种特殊的情况,如果我的回调通过then返回一个新的promise,那么通过then返回的promise将不会执行,直到回调执行完成。详细细节请参考 Promises/A+,这是个复杂的规则,通过例子我们能更清楚的认识下.

  假设你写了段登陆的代码,查找对象然后更新它。在旧的回调范式中,你可以使用金字塔式的代码完成:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 Parse.User.logIn("user","pass", { success:function(user) { query.find({ success:function(results) { results[0].save({ key: value }, { success:function(result) { // the object was saved. } }); } }); } });

  这看起来已经很可笑,更可笑的是甚至没有任何错误处理。但是promise链式的结构,使代码看起来更舒服了:

  ?

1 2 3 4 5 6 7 Parse.User.logIn("user","pass").then(function(user) { returnquery.find(); }).then(function(results) { returnresults[0].save({ key: value }); }).then(function(result) { // the object was saved. });
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表