【问题标题】:JSON store hangs while retrieving dataJSON 存储在检索数据时挂起
【发布时间】:2015-01-30 06:29:48
【问题描述】:

我们观察到,在某些时候访问 JSONStore API 会长时间挂起,为了使其正常工作,我们必须再次调用该函数,或者必须将应用程序置于后台并再次置于前台。

注意:当应用程序遇到此问题时,在我们重新安装应用程序或重新启动设备之前,行为是相同的。

似乎没有任何合适的场景,我们搜索了很多文章但没有找到任何解决方案,欢迎任何解决方案。

我们在 S5 和 S4 等 Android 设备上观察到此问题。

这是我的代码片段:

function getWidgets(w_id, getWidgetsSuccessCallback, getWidgetsFailureCallback) {

var query = { user_id : w_id };
var options = {};

WL.JSONStore.get(StorageCollections.widgets).find(query, options)
.then(function(arrayResults) {
    var count = arrayResults.length;

    Logger.debug("getWidgets: success, count: " + count);

    ...

    getWidgetsSuccessCallback(widgets);
})
.fail(function(errorObject) {
    Logger.error("getWidgets: failed, error: " + JSON.stringify(errorObject));
    getWidgetsFailureCallback(errorObject);
});}

一切正常时的日志http://pastebin.com/NVP8ycTG

访问 JSON 存储时的日志挂起,仅当应用程序进入后台并再次返回前台时才会起作用http://pastebin.com/eYzx57qC

JSON 存储初始化如下

var collections = {
// User
user: {
    searchFields: {
        user_id             : 'string',
        user_name           : 'string',
        first_name          : 'string',
        last_name           : 'string',
    }           
}
}};


// Storage encryption
var options = {};
if (key) {
    options.password = key;
    options.localKeyGen = true;
}

// Open the collection
var promise = WL.JSONStore.init(collections, options)
.then(function() {
    Logger.debug("initializeAppStorage: " + JSON.stringify(collections) + " completed");
    initAppStorageSuccessCallback(true);
    return true;
})
// Handle failure
.fail(function(errorObject) {
    Logger.error("initializeAppStorage: failed, error: " + errorObject.toString());
    initAppStorageFailureCallback(errorObject.toString());
    return false;
});
return promise;

谢谢。

【问题讨论】:

  • 你是如何初始化这个商店的?
  • 是的,我已经编辑了我的评论;我们正在如上所述进行初始化。
  • 什么是 StorageCollections.widgets?
  • 同时发布成功和失败函数的代码。即 getWidgetSuccessCallback
  • 当检索到的数据过多(或存储增加时与性能相关的事情)时是否会发生这种情况?

标签: ibm-mobilefirst jsonstore


【解决方案1】:

试试这个:

function getWidgets(w_id, getWidgetsSuccessCallback, getWidgetsFailureCallback) {

var query = { key : w_id };
var options = {};

WL.JSONStore.get(StorageCollections.widgets).find(query, options)
.then(function(arrayResults) {
    var count = arrayResults.length;

    Logger.debug("getWidgets: success, count: " + count);

    ...

    getWidgetsSuccessCallback(widgets);
})
.fail(function(errorObject) {
    Logger.error("getWidgets: failed, error: " + JSON.stringify(errorObject));
    getWidgetsFailureCallback(errorObject);
});}

【讨论】:

  • 我看到你已经改变了query var。我已经编辑了我上面的帖子以反映相同的内容,这是我的一个错字。
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 2015-12-25
  • 2020-12-11
相关资源
最近更新 更多