WinJS.Binding.List.createFiltered:谓词中的异步调用

时间:2013-10-31 20:52:40

标签: javascript windows-8 windows-store-apps winjs

下面代码中的谓词将始终返回false。 我的问题是如何“等待”异步操作并将该结果用作谓词结果?

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

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

         return filter;
});

2 个答案:

答案 0 :(得分:1)

不幸的是,WinJS.Binding.List不支持异步谓词。我能想到的唯一方法就是这样做 - 即。同步阻止UI线程 - 最后坐在一个循环中,观察在已完成的处理程序和错误处理程序中设置的布尔标志(在这种情况下你必须使用一个错误处理程序来改变那旗帜)。

您打算使用异步调用完成什么?应用程序启动时是否可以缓存这些结果,以便您可以对该缓存数据进行同步查找?

答案 1 :(得分:-1)

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

或者你可以将return filter;放在promise.done部分中,但是然后它会有效地同步运行,因为你在返回之前等待promise的结果。