0

以下のコードの述語は、常に false を返します。私の質問は、非同期操作を「待機」し、その結果を述語の結果として使用するにはどうすればよいですか?

return someList.createFiltered(function(item) {                        
         var filter = false;
         var promise = someOperationAsync();

         promise.done(function(b) {
              filter = b;
         });

         return filter;
});
4

2 に答える 2

1

残念ながら、非同期述語は WinJS.Binding.List ではサポートされていません。これを実行するために考えられる唯一の方法 (つまり、UI スレッドを同期的にブロックする方法) は、最後にループに入って、完了ハンドラーとエラー ハンドラーに設定されたブール値フラグを監視することです (そして、この場合、Promise でエラー ハンドラーを使用してそのフラグを変更します)。

非同期呼び出しで何を達成しようとしていますか? そのキャッシュされたデータに対して同期ルックアップを実行できるように、アプリの起動時にこれらの結果をキャッシュすることは可能でしょうか?

于 2013-10-31T21:21:24.120 に答える
-1

promise を返し、呼び出し元の関数から 'then' または 'done' を呼び出す必要があります。

return filter;別の方法として、promise.done セクション内に配置することもできますが、実際には、promise の結果が返されるのを待ってから戻るため、同期的に実行されます。

于 2013-10-31T21:03:28.570 に答える