经过一些实验,我最终得到了以下代码,试图复制C#的await功能:
现在的结果是'MyFunc2()'在'MyFunc()'完成之前执行。'MyFunc2()'使用全局变量xmlDoc,此时该变量未定义。
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,此时该变量未定义。
new WinJS.Promise
的参数不是一个 Promise,而是一个 Promise 生成器。由于您已经有了一个 Promise,请直接使用它。var promise = MyFunc().then(...)
。 - Raymond Chen