Ibm mobilefirst Worklight JSON Store,我们可以获得竞争条件吗?

Ibm mobilefirst Worklight JSON Store,我们可以获得竞争条件吗?,ibm-mobilefirst,jsonstore,Ibm Mobilefirst,Jsonstore,Worklight 6.1同时在Windows(同事)和Mac(me)上运行,构建了一个适用于Android设备的混合应用程序,但为了加快开发速度,我们在桌面上的Chrome浏览器中作为移动Web应用程序进行了初步测试 我们得到了一个奇怪的症状,我正试图细化到一个可复制的测试用例。我想当我进入调试器并让它运行时,我会看到不同的行为。在我继续之前,我想检查一下某个编码模式是否可能是导致该症状的原因 基本问题:在发出另一个请求之前,我们是否应该等待JSONSTore请求返回的对集合执行操作的承诺得到

Worklight 6.1同时在Windows(同事)和Mac(me)上运行,构建了一个适用于Android设备的混合应用程序,但为了加快开发速度,我们在桌面上的Chrome浏览器中作为移动Web应用程序进行了初步测试

我们得到了一个奇怪的症状,我正试图细化到一个可复制的测试用例。我想当我进入调试器并让它运行时,我会看到不同的行为。在我继续之前,我想检查一下某个编码模式是否可能是导致该症状的原因

基本问题:在发出另一个请求之前,我们是否应该等待JSONSTore请求返回的对集合执行操作的承诺得到解决?下面有更多解释

总体目的是将一些数据加载到JSONStore中,如果记录已经存在,则执行一些智能替换/合并操作。伪代码:

  for each record retrieved from back-end

        if ( record already present in Store )
              do some data merging 
              replace record
        else
              add record
应用程序代码实际上是这样工作的,仅考虑add()的情况,当存储为空时,问题就会显现出来,需要添加所有记录

  for each record to add 
        addPromise = store.get().add(record);
        listOfPromises.insert(addPromise);

  examine the list of promises recording any errors
也就是说,在发出下一个add请求之前,没有“等待”add完成。因此,实际上,我们已经启动了一组“并行”添加,无论这在Chrome的JavaScript中意味着什么

代码运行正常,未报告任何错误。在安卓设备上,它工作可靠。在正常运行的Chrome中(没有步进调试器),我们没有报告错误,但只插入了一条记录——事实上,就像初始“空”存储的快照已经拍摄,每个添加都在处理该“空”副本


写了这篇文章后,我现在非常确信上面描述的编码模式容易受到竞争的影响,更好的方法是建立一个文档列表,在一次操作中添加并插入它们。

稍后将给出更详细的答案,但我现在知道这一点

上述编码模式容易受到一种竞争和竞争的影响 更好的方法是建立一个要添加和删除的文档列表 在单个操作中插入它们

这是真的。在浏览器中,JSONStore确实要求我们在发出另一个请求之前等待一个请求的结果。建议的方法是

var dataToAdd = buildArrayOfDataToAdd(responseFromServer);
var dataToReplace = buildArrayOfDataToReplace(responseFromServer);

jsonstore.add( dataToAdd ).then( function() { jsonstore.replace( dataToReplace); })