最近,我读了有关早期jQuery Promises / A模式中缺点的article信息:


像jQuery(1.8之前的版本)之类的库不这样做:它们只是突变
现有承诺的状态。就是说如果你答应
淘汰给多个消费者,他们可能会干扰其状态。至
要意识到这是多么荒谬,请考虑同步并行:
您将函数的返回值分配给了两个人,其中一个
可能以某种方式将其更改为引发的异常!


我想使用代码来实现缺点,我尝试过:

<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script type="text/javascript">

    var promise = $.get("http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js");

    var promise1 = promise.then(function (result) {
        return "Hello";
    });

    promise1.then(function (result) {
        console.log("in promise1 ------>", result.length);
    })

    var promise2 = promise.then(function (result) {
        return "World";
    })

    promise2.then(function (result) {
        console.log("in promise2 ------>", result.length);
    })
</script>
</head>
...


似乎不起作用,如何解决上述文章的问题?

最佳答案

好吧,类似这样的东西在.then之前不能在1.8之前起作用-仅在.pipe下起作用:

function doStuff() {
  promptAsync("What url you want to fetch?").then(function (url) {
    return $.get(url)
  }).then(function (contents) {
    return confirmAsync("Here are the contents " + contents + ". Is this ok?")
  }).then(function (confirmation) {
    if (!confirmation) {
      return doStuff();
    }
    return alertAsync("I am glad you are happy with these results");
  });
}


这与同步等效项平行:

function doStuff() {
  var url = prompt("What url you want to fetch?");
  var contents = $.get(url);
  var confirmation = confirm("Here are the contents " + contents + ". Is this ok?");
  if (!confirmation) {
    doStuff();
  } else {
    alert("I am glad you are happy with these results");
  }
}


当然,即使在1.8之后,抛出的任何错误也不会从promise .fail中获得,而是会使您的页面崩溃。

09-17 20:24