Вот мой код.
db.query(str, arr, function selectCb(error, results, fields) {
if (error) {
return proceed(false, {errno:'010',message:error.message}, request);
}
for (var i=0; i<results.length; i++) {
// add the gib infor
if (results[i].refertype=='G') {
var input={};
input.fields="*";
input.gibname=results[i].refername;
gib.getgibinternal(input, makeCallback(i));
function makeCallback(index) {
return function(gresult) {
results[index].gib=gresult.data[0];
if (index==results.length-1) {
// becuase problem was comint in yapi enterothers it give onlye one result of gib
return proceed(true, results, request);
}
}
}
// add the user info
} else if(results[i].refertype=='U') {
var input={};
input.username=results[i].refername;
input.fields="*";
user.getuserinternal(input, makeCallbackuser(i));
function makeCallbackuser(index) {
return function(gresult) {
results[index].user=gresult.data[0];
if(index==results.length-1) {
return proceed(true, results, request);
}
}
}
}
}
if (results.length==0) {
return proceed(true, results, request);
}
});
});
Проблема в этом коде состоит в том, что, когда у меня 5 записей всего ссылочного типа G и 5 записей ссылочного типа U, эта функция возвращалась без ожидания пользовательских данных дляcome.
Предположим, что тип рефлектора G наконец-то наступил, и пользовательские данные опаздывают с сервера, поэтому, когда прибыл последний G, они возвращаются без пользовательских данных.Что я хочу, это выполнить весь запрос, а затем вернуть значение, как я могу это сделать?
как я заставляю ждать прихода пользовательских данных?