0

Windows 8アプリのローミングフォルダーからファイルを読み取って、文字列を返そうとしているだけです。console.log(text)は正しい文字列を出力していますが、私は明らかに約束と遅延を理解していないか、JavaScriptを台無しにしています。strは未定義です。

var getJsonString = function () {
    var jsonText;
    roamingFolder.getFileAsync(fileName)
            .then(function (file) {
                return Windows.Storage.FileIO.readTextAsync(file);
            }).done(function (text) {
               //Printing Correct String
                console.log(text);
                jsonText = text;
            });
    return jsonText;
}

var str = getJsonString();
console.log(str);

MSDNの記事http://msdn.microsoft.com/en-us/library/windows/apps/hh465123を見ましたが、それでも混乱しています。誰かアイデアがありますか?

編集:実際には、ローミングフォルダーにJSON文字列を保存するためのより良い方法はありますか?現在、テキストファイルを作成して使用しています。

4

2 に答える 2

1

コードは非同期です。コールバックはdone()、残りの関数が終了した後しばらくしてから発生します。

あなたは約束を返す必要があります。

于 2012-12-12T04:03:42.020 に答える
0

このような何かがそれを行う必要があります...

var getJsonStringAsync = function() {
    return roamingFolder.getFileAsync("myData.json")
        .then(function(file) {
            return Windows.Storage.FileIO.readTextAsync(file);
        });
};

getJsonStringAsync().then(function(text) {
    console.log(text);
});

getJsonStringAsync関数が.then()関数の結果をどのように返すかを確認してください。その.then()関数はPromiseを返します。非同期関数になり、それが慣例であるため、非同期サフィックスを追加して関数の名前を変更しました。

これで、その関数を使用するときはいつでも、それを呼び出して.then()(または.done())を使用し、promiseが提供するデータをパラメーターとする関数を指定します。

お役に立てれば。詳細については、 codefoster.com / using-promisesを確認してください。また、codeSHOWアプリ(codeplexおよびWindows Store)にあるPromisesデモも、この概念に役立つ可能性があります。

于 2012-12-12T16:00:27.400 に答える