В частности, я делаю вызов в базу данных, которая извлекает агрегированное значение. Затем это отображается пользователю. Но до того, как вызов адаптера (так как я использую подсветку) может завершиться, после этого будет выполнен код, который я хочу заблокировать. Я попробовал все от setTimeout до вызова функции, которая выполняет пустой цикл while. Ни один из них, похоже, не работает, так как код пропускает все это. Может кто-то, пожалуйста, помогите мне с этим?Есть ли способ выполнить блокирующий код в javascript?
Пример кода:
var flow_completed_percentage=0;
function setFlowStatus()
{
var flow_name,flow_status_value;
for(var i = 0;i < 2; i++)
{
flow_name=flow_name_DB[i].trim();//flow_name_DB is an array that stores the flow names
flow_status_value=flow_status_DB[i].trim();//flow_status_DB is an array that stores the flow status values
if(flow_status_value=="R" || flow_status_value=="A")
{
var invocationData_totalPercentage = {
adapter : "dummy_adapter",
procedure : "getJobPercentage",
parameters : [flow_name]
};
WL.Client.invokeProcedure(invocationData_totalPercentage, {
onSuccess : setPercentageSuccess,
onFailure : setPercentageFailure
});
}
}//end of for loop
//the problem is next iteration of for loop begins before the adapter call for the current iteration completes.
//So flow_name gets overwritten and it gives the wrong result.
function setPercentageSuccess(total_percentage)
{
var tot_percent = total_percentage.invocationResult.resultSet[0];
flow_completed_percentage=tot_percent.TOT_PERCENT;
if(flow_status=="R")
runningStatus(flow_name);
else if(flow_status=="A")
abortedStatus(flow_name);
}
function setPercentageFailure()
{
alert("Failed to fetch records from DB");
}
}
function runningStatus(flow)
{
//do something
}
function abortedStatus(flow)
{
//do something
}
Javascript, в клиентах (browers) и серверах (node.js), не относится к вещам, которые блокируют выполнение. – seand
, так что нет способа это сделать? – Shaili