在没有连接到适配器时阻止 "onSuccess" 触发?

Preventing "onSuccess" firing when there is no connection to an adapter?

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

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

示例代码:

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

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

如何防止这种情况发生?

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

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.