у меня есть модель что-то вроде этого:sailsJS .exec() в forloop не работает
\**
* user.petIds = ["1","2","3","4"];
*\
getPets: function(users){
var response = [];
users.forEach(function(user){
Pet.find(users[i].petIds).exec(function(err, pets){
if(err) return null;
console.log("index: "+i);
response.push({ name: users[i].name, pets: pets});
});
});
return response;
}
Я хочу, чтобы каждый из домашних животных массива животных идентификаторами для массива пользователей. Тем не менее, exec выполняет только после обратного вызова, который в этом случае вызывает возврат преждевременно. Есть что-нибудь в Sails, которые решают эту проблему? В противном случае невозможно использовать цикл for для запроса. Я все еще очень новичок в том, как работает JS. Любая помощь приветствуется. Спасибо (:
Итак, я предполагаю, что getPets возвращает функцию (err, response)? – holyxiaoxin
'getPets' ничего не возвращает. Это то, что вам нужно понять о асинхронном программировании. Чтобы обработать результаты того, что происходит в 'getPets', вы должны передать функцию обратного вызова в качестве аргументов' getPetsCb'. Эта функция может быть любой, но должна иметь подпись '(err, result)', которая является типичной для обратных вызовов Node. – sgress454
Я получил это. Большое спасибо за помощь. Это заставило меня хорошо понять асинхронное программирование. (: – holyxiaoxin