Using MobileFirst v6.3, whenever I communicate with an adapter using WL.Client.invokeProcedure, the onSuccess function ALWAYS fires, regardless of actual success or not. This includes when the mobile device is completely offline.
onConnectionFailure still functions as expected, firing after the adapter times out, but having onSuccess fire is essentially useless.
Sample code:
var invocationData = {
adapter : 'MaximoLogin',
procedure : 'setValue',
parameters : [itemid,value]
};
WL.Client.invokeProcedure(invocationData, {
onSuccess : valueSuccess(itemid),
onConnectionFailure: connectivityFailure,
onFailure : connectFailure
});
How do I prevent this from happening?
You should update your code as follows:
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 ...
}
The reason why your valueSuccess
function is always called is because you are always calling it i.e.: valueSuccess(itemid)
. onSuccess
takes a callback function and you are invoking the function that's why it always runs.
If you want to pass some variable to your callback functions you use invocationContext
which is an object that will be passed to your callback functions both onSuccess
and onFailure
.