一些實驗後,我已經結束了與下面的代碼,試圖複製C#等待功能:WinJS無極然後示數
var promise = new WinJS.Promise(MyFunc())
.then(function() {
// Second function which uses data set-up in the first
MyFunc2();
});
「MYFUNC()」正確執行,但「myfunc2所()」沒有,程序崩潰。我對Promise對象有什麼誤解?
(這是使用Windows 8)
編輯:
爲MYFUNC()的完整代碼現在如下:
function MyFunc() {
var foldername = "Folder";
var filename = "readme.xml";
var promise = Windows.ApplicationModel.Package.current.installedLocation.getFolderAsync(foldername).then(function (folder) {
folder.getFileAsync(filename).then(function (file) {
var loadSettings = new Windows.Data.Xml.Dom.XmlLoadSettings;
loadSettings.prohibitDtd = false;
loadSettings.resolveExternals = false;
Windows.Data.Xml.Dom.XmlDocument.loadFromFileAsync(file, loadSettings).then(function (doc) {
dataText = doc.getXml();
xmlDoc = doc;
}, function (error) {
output.value = "Error: Unable to load XML file";
output.style.color = "red";
}, function (error) {
output.value = "Error: Unable to load XML file";
output.style.color = "red";
})
})
});
return promise;
};
結果現在是 'myfunc2所()'在'MyFunc()'完成之前執行。 `MyFunc2()使用全局變量xmlDoc,因此當時未定義。
不MYFUNC實際上將返回你需要的數據?還是它只是設置一些全局變量,需要在後面的函數中使用? –
只是設置一些全局變量 –
可能重複[等到承諾和嵌套thens完成](http://stackoverflow.com/questions/14173228/wait-until-promise-and-nested-thens-are-complete) –