J'ai défini une variable tableau dans la fonction, qui contient 6 éléments, puis j'ai appelé la fonction de rappel dans la fonction. La valeur de la variable tableau n'est pas accessible dans la fonction de rappel, mais l'attribut length est accessible. Je me sens très confus et je ne sais pas comment le résoudre.
for(var i=0;i<bookARR.length;i++){//在该书中写入 有借图书馆id
//因为图书馆表需要所有书籍的_id,所以检测有时,记录id
console.log("在外面"+bookARR[i]);//9787539989891 9787533946777 9787569914078 9787513316286 9787218113180 9787535491978
Book.getBookByISBN(bookARR[i],function(err,book){
if(!book||err){
console.log("huidiao"+bookARR.length);//6
console.log("在里面"+bookARR[i]);//undefined undefined undefined undefined undefined undefined
newBook.push(bookARR[i]);
}else{
newBook_id.push(book._id);
}
ep.emit('examine');
})
}
Book.getBookByISBN() est une fonction que j'ai définie dans d'autres modules
Parce que
Alors
Mettez bookARR[i] en rappel
La raison a déjà été mentionnée. En fait, il s'agit simplement de passer dans bookArr[i] où vous définissez l'appel de rappel dans la fonction Book.getBookByISBN(). Comprendre les paramètres formels et les paramètres réels
.Il s'agit d'un problème asynchrone typique, et la portée de i y est toujours.
Parce que je t'attends de manière asynchrone
getBookByISBN
方法调用callback的时候i=bookARR.length
。这已经越界了,所以是undefined
.Solution :
1. Fermeture
2.let