1

我正在使用 JayData.js 库。它工作得很好。但是,在某些情况下,我在函数树的深处有一个 toArray() 调用。与其尝试从那里访问我的“忙碌”信号,不如尽快使用方法块。那可能吗?我正在描绘类似“context.Groups.toArray(myObservableVar).block()”的东西。

更新 1:从返回值上使用“then”和“when”运算符判断,JayData 库似乎返回了一个 jQuery 延迟对象。有没有相应的“加入”方法——意思是等待完成?

4

2 回答 2

3

事实上 JayData toArray() (以及所有相关的数据返回或保存/更新方法)实现了 jQuery deferred。从 1.0.5 开始,您必须包含 JayDataModules/deferred.js 才能使此功能正常工作。

对于您的用例$.when可能是一个答案:

var customers = context.Customers.toArray();
var products = context.Products.toArray();
var suppliers = context.Suppliers.toArray();

$.when(customers, products, suppliers).then(function(customers, products, suppliers) {
   //we have everything here
   //notice the the parameter names are shadowed as the var customers variable only
   //holds a promise not the value
  customers.forEach( ... );
  products[12].ProductName = "X";
 });
于 2012-06-17T16:01:52.297 回答
1

一种blockUntilDone()方法会违反延迟执行和继续的原则。JayDatatoArray()是异步的,因为它旨在不阻止调用者。

如果你想要这种代码:

// Initialize context and groups...

var arrayOfGroups = context.Groups.toArray();  // Want synchronous behavior.

// Do something with 'arrayOfGroups'...

试图阻止直到延迟解决不是解决方案。将代码的最后一部分移到传递给的回调中toArray()

// Initialize context and groups...

context.Groups.toArray(function(arrayOfGroups) {
    // Do something with 'arrayOfGroups'...
});

或者,使用done()then()绑定到返回的承诺:

context.Groups.toArray().done(function(arrayOfGroups) {
    // Do something with 'arrayOfGroups'...
});
于 2012-06-15T15:17:47.137 回答