DataSource对象如何作为同步工作?

时间:2015-10-23 14:59:23

标签: javascript mobile datasource synchronous devextreme

的Javascript

var denemeSource = new DevExpress.data.DataSource({
                        store: Deneme.db.deneme
                    }).load().done(function (result) {
                        alert("1x");
                    });
var denemeSource1 = new DevExpress.data.DataSource({
                        store: Deneme.db.deneme1
                    }).load().done(function (result) {
                        alert("2x");
                    });
var denemeSource2 = new DevExpress.data.DataSource({
                        store: Deneme.db.deneme2
                    }).load().done(function (result) {
                        alert("3x");
                    });
alert("4x");

如果代码是在Devextreme mobile中按顺序编写的,那么' 1x,2x,3x,4x'就不会按照订购。 ' 4X'成为最新的。

我如何继续顺序? (1倍,2倍,3倍,4倍)

DataSource对象如何作为同步工作?

1 个答案:

答案 0 :(得分:0)

我没有你正在使用的图书馆的经验;但是,我确实有本机JavaScript的经验。希望有这个图书馆经验的人可以扩展我的答案,以进一步获得实现目标所需的任何信息。

您要实现的目标非常简单,但您需要首先了解异步函数的工作原理。

异步函数(异步)

  • 可以在另一个线程上调用(用于基于线程的延迟 机制),因此应用程序必须同步回调的任何资源 访问。
  • 无法触摸与原始堆栈或线程相关的任何内容,例如 局部变量或线程本地数据。
  • 如果原始线程保持锁定,则将调用回调 在他们之外。
  • 必须假设其他线程或事件可以修改 申请的州。

那就是说,你有两个想法。使用后一种方法调用异步函数或使用超时检查每个函数是否已成功运行。

我建议使用后者。

(new DevExpress.data.DataSource({
    store: Deneme.db.deneme
}).load().done(function (result) {
    alert("1x");
    (new DevExpress.data.DataSource({
        store: Deneme.db.deneme1
    }).load().done(function (result) {
       alert("2x");
        (new DevExpress.data.DataSource({
            store: Deneme.db.deneme3
        }).load().done(function (result) {
            alert("3x");
        }));
    }));
}));

使用超时,您应该知道超时也使用异步函数。

var returns = array(false, false, false);
var denemeSource = new DevExpress.data.DataSource({
    store: Deneme.db.deneme
}).load().done(function (result) {
    returns[0] = true;
});
var denemeSource1 = new DevExpress.data.DataSource({
    store: Deneme.db.deneme1
}).load().done(function (result) {
    returns[1] = true;
});
var denemeSource2 = new DevExpress.data.DataSource({
    store: Deneme.db.deneme2
}).load().done(function (result) {
    returns[2] = true;
});

timeout(function(){
    //all functions run successfully
});

function timeout(success_func) {
    setTimeout(function () {
        for(var k in results){
            if(results[k] == false){
                has_false = true;
                break;
            }
        }
        if(has_false)
            timeout();
        else
            success_func();
    }, 1000);
}