いくつかの実験の後、C# の await 機能を複製しようとして、次のコードになりました。
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;
};
その結果、「MyFunc()」が完了する前に「MyFunc2()」が実行されます。`MyFunc2() はグローバル変数 xmlDoc を使用するため、その時点では定義されていません。