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

您需要返回承诺,然后从调用函数中调用“then”或“done”。

或者,您可以将return filter;其放入 promise.done 部分,但实际上它会同步运行,因为您将在返回之前等待 promise 的结果。

于 2013-10-31T21:03:28.570 回答