我無法弄清楚如何執行子函數,並有一個延遲函數等待在返回之前調用它。DOJO Promise所有子功能
我已經採取了一個示例並對其進行了修改。它顯示了我想要做的事情。
基本上在下面的例子中,bingRequest調用只設置一個值的子。我希望BingRequest等到該子通話完成。在我的真實世界中,該值影響bingRequest函數返回的內容。我目前只是在bingRequest中插入了子代碼,但是如果我可以將子代碼拆分出來,它就會變得更加乾淨。如果我必須這樣做,我會但願能夠分解一些代碼。
感謝您的關注。
<!DOCTYPE html>
<html >
<head>
<link rel="stylesheet" href="../../_static/js/dojo/../dijit/themes/claro/claro.css">
<script>dojoConfig = { async: true, parseOnLoad: false }</script>
<script src='//ajax.googleapis.com/ajax/libs/dojo/1.8.0/dojo/dojo.js'></script>
<script>
require(["dojo/promise/all", "dojo/Deferred", "dojo/dom", "dojo/on", "dojo/json", "dojo/domReady!"],
function (all, Deferred, dom, on, JSON) {
var y = "none"
function googleRequest() {
var deferred = new Deferred();
setTimeout(function() {
deferred.resolve("foo");
}, 500);
return deferred.promise;
}
function bingRequest() {
var deferred = new Deferred();
setTimeout(function() {
deferred.resolve("bar");
sub();
}, 750);
return deferred.promise;
}
function sub() {
setTimeout(function() {
y = "some";
}, 750)
}
function baiduRequest() {
var deferred = new Deferred();
setTimeout(function() {
deferred.resolve("baz");
}, 1000);
return deferred.promise;
}
on(dom.byId("startButton"), "click", function() {
dom.byId("output").innerHTML = "Running...";
all([googleRequest(), bingRequest(), baiduRequest()]).then(function (results) {
dom.byId("output").innerHTML = JSON.stringify(results)+y;
});
});
});
</script>
</head>
<body class="claro">
<h1>Output:</h1>
<pre id="output"></pre>
<button type="button" id="startButton">Start</button>
</body>
</html>
是這樣,你不希望通過真實後bingRequest()返回被fullfilled直到子() 「結束」,750毫秒的承諾? – goat
是的,這是相關的。這只是一個例子,我試圖展示我在我的代碼中需要非公共系統的更復雜功能中所做的事情。 – Jim