2012-05-14 10 views
1

私は存在しない可能性がありますファイルにアクセスしようとしている:約束事で「失敗」してもエラーが検出されないのはなぜですか?

var localFolder = Windows.Storage.ApplicationData.current.localFolder; 

localFolder.getFileAsync(stateFile).then(function (file) { 
      Windows.Storage.FileIO.readTextAsync(file).then(function (text) { 
     // do something with the text 

    }); 
}, function (err) { 
    // log error, load dummy data 

}); 

ファイルが存在しない場合、メソッドは呼び出さないが、私のアプリケーションが例外で停止するだけで後に発生する「失敗」 "ファイルが見つかりません"。デバッガで「続行」を押すと、「失敗」メソッドが続行されます。

何が間違っていますか?私は事前に存在を確認する必要がありますか?

+0

なぜ失敗するのですか?私はここで少し失われている.. :) –

+0

それを忘れて、私はあなたがjQueryの約束について話していると思った。ごめんなさい。 – fcalderan

+0

WinJS Promise == jQueryは動作に約束します.. –

答えて

2

最初の例外が表示されています。デバッガはスローの時点で壊れています。デバッガダイアログの「続行」ボタンを押すと、アプリケーションは実行を継続し、例外ハンドラが実行されます。

"Debug | Exceptions"メニューを使用して、最初のチャンスの例外をオフにすることでこれを変更できます。

+0

あなたは正しいですが、私は開発者として「最初のチャンスの例外」を無効にすることはできません。私はこのエラーメッセージを毎回見るようになっていますか? –

+0

できます。 [デバッグ]メニューの[例外]メニュー項目に移動します。ダイアログでは、ツリービューが表示されます。 "JavaScript Runtime Exceptions"で、 "Thrown"列のチェックボックスをオフにすると、最初のチャンス例外のブレークがオフになります。ただし、このチェックボックスの場所を覚えておくことをお勧めします。非同期コードの問題を追跡する際には、最初のチャンスの例外が便利です。 –

+0

しかしそれは*正確に*私のポイントです。私はそのチェックボックスをオフにできることを知っています。私はちょうど開発者だと言っています、私は本当に*すべきではありません。だからあなたの提案が私にとって意味をなさない方法です:/ –

1

私はこの同じ問題を2〜3日間解決しようとしていますが、つぎのような解決策があります。getFilesAsync関数を使用してフォルダ内のすべてのファイルのリストを取得し、必要なファイルが存在します。その後、私は投げずにgetFileAsynsを呼び出すことができます。それほどきれいではないが、私のために働く。私は、開発者が例外をオフにできると仮定すると、最良のアドバイスではないと私は同意します...私の意見では、この問題はRT実装のバグとみなされるべきです。

関連する問題