javascript 蓝鸟跳过的承诺示例 "then"
javascript promise example with bluebird skips "then"
我试图了解有关 promises 的信息,但现在遇到了困难。
这是我的例子,但它不起作用:
<html>
<head>
<title>test page</title>
</head>
<body>
<script type="text/javascript" src="bluebird.js"></script>
<script type="text/javascript" >
function doTheThing () {
return new Promise (function (resolve, reject) {
setTimeout(function(){alert("2");},1000)
alert("1");
});
}
doTheThing().then(
function() {
alert("3");
}, function(error) {
alert("5");
}
);
</script>
</body>
</html>
这会先提示“1”,然后提示“2”,仅此而已。
为什么从不提醒“3”?为什么 then() 根本不执行?
您需要解决 Promise:
function doTheThing () {
return new Promise (function (resolve, reject) {
setTimeout(function(){
alert("2");
resolve();
}, 1000)
alert("1");
});
}
想象一下,如果您的代码采用回调参数,而不是返回 Promise:
function doTheThing (doneCallback) {
setTimeout(function(){
alert("2");
doneCallback();
}, 1000);
alert("1");
}
您需要调用 doneCallback
以将值传递给调用异步代码(或者只是让它知道它可以继续,就像在本例中一样)。解决(或拒绝)一个 Promise 与此类似 - 它启用异步流控制和值传递。
Promise 必须是 resolved
或 rejected
才能继续将执行传递给下一个 then
成功或错误处理程序。所以在你的 doTheThing
函数中你需要调用 resolve
。我已经对您的代码进行了一些修改,以证明通过调用 resolve
可以将控制权传递给成功处理程序,事实证明 3
是通过调用 resolve("3")
.[= 给出的19=]
function doTheThing () {
return new Promise (function (resolve, reject) {
setTimeout(function(){alert("2");},1000)
alert("1");
resolve("3");
});
}
doTheThing().then(function(value) {
alert(value);
}, function(error) {
alert("5");
});
new Promise (function (fulfill, reject) {
setTimeout(function(){alert("2");},1000)
alert("1");
});
要让一个 promise 不挂起,你必须 fulfill(通过执行 fulfill 函数,或者 reject(通过执行 reject 函数),只有这样 .then(onFulfilled, onRejected)
中的相应函数才会被触发
我试图了解有关 promises 的信息,但现在遇到了困难。 这是我的例子,但它不起作用:
<html>
<head>
<title>test page</title>
</head>
<body>
<script type="text/javascript" src="bluebird.js"></script>
<script type="text/javascript" >
function doTheThing () {
return new Promise (function (resolve, reject) {
setTimeout(function(){alert("2");},1000)
alert("1");
});
}
doTheThing().then(
function() {
alert("3");
}, function(error) {
alert("5");
}
);
</script>
</body>
</html>
这会先提示“1”,然后提示“2”,仅此而已。
为什么从不提醒“3”?为什么 then() 根本不执行?
您需要解决 Promise:
function doTheThing () {
return new Promise (function (resolve, reject) {
setTimeout(function(){
alert("2");
resolve();
}, 1000)
alert("1");
});
}
想象一下,如果您的代码采用回调参数,而不是返回 Promise:
function doTheThing (doneCallback) {
setTimeout(function(){
alert("2");
doneCallback();
}, 1000);
alert("1");
}
您需要调用 doneCallback
以将值传递给调用异步代码(或者只是让它知道它可以继续,就像在本例中一样)。解决(或拒绝)一个 Promise 与此类似 - 它启用异步流控制和值传递。
Promise 必须是 resolved
或 rejected
才能继续将执行传递给下一个 then
成功或错误处理程序。所以在你的 doTheThing
函数中你需要调用 resolve
。我已经对您的代码进行了一些修改,以证明通过调用 resolve
可以将控制权传递给成功处理程序,事实证明 3
是通过调用 resolve("3")
.[= 给出的19=]
function doTheThing () {
return new Promise (function (resolve, reject) {
setTimeout(function(){alert("2");},1000)
alert("1");
resolve("3");
});
}
doTheThing().then(function(value) {
alert(value);
}, function(error) {
alert("5");
});
new Promise (function (fulfill, reject) {
setTimeout(function(){alert("2");},1000)
alert("1");
});
要让一个 promise 不挂起,你必须 fulfill(通过执行 fulfill 函数,或者 reject(通过执行 reject 函数),只有这样 .then(onFulfilled, onRejected)
中的相应函数才会被触发