没有连接到适配器时阻止“onSuccess”触发?

时间:2015-03-26 15:42:39

标签: hybrid-mobile-app ibm-mobilefirst

使用MobileFirst v6.3,每当我使用WL.Client.invokeProcedure与适配器通信时,onSuccess函数总是会触发,无论实际成功与否。这包括移动设备完全脱机的时间。

onConnectionFailure仍然按预期运行,在适配器超时后触发,但是onSuccess fire基本没用。

示例代码:

var invocationData = {
                    adapter : 'MaximoLogin',
                    procedure : 'setValue',
                    parameters : [itemid,value]
                };

WL.Client.invokeProcedure(invocationData, {
                onSuccess : valueSuccess(itemid),
                onConnectionFailure: connectivityFailure,
                onFailure : connectFailure
            });

如何防止这种情况发生?

1 个答案:

答案 0 :(得分:3)

您应该按如下方式更新您的代码:

var invocationData = {
  adapter : 'MaximoLogin',
  procedure : 'setValue',
  parameters : [itemid,value]
};

WL.Client.invokeProcedure(invocationData, {
  onSuccess : valueSuccess,
  onConnectionFailure: connectivityFailure,
  onFailure : connectFailure,
  invocationContext : {
    itemid: itemid
  }
});

// your success function
function valueSuccess(response) {
  // get the item id from the invocationContext object
  var successItemId = response.invocationContext.itemid;

  // handle your success ...
}

始终调用valueSuccess函数的原因是因为您始终在调用它,即:valueSuccess(itemid)onSuccess采用回调函数,您正在调用其始终运行的函数。

如果您想将某个变量传递给回调函数,可以使用invocationContext这个对象,该对象将传递给onSuccessonFailure的回调函数。