最近,我读了有关早期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
中获得,而是会使您的页面崩溃。