javascript - Wie greift die Callback-Funktion auf den Wert unter der aktuellen Funktion zu?
大家讲道理
大家讲道理 2017-05-16 13:35:48
0
4
490

Ich habe in der Funktion eine Array-Variable definiert, die 6 Elemente enthält, und dann die Rückruffunktion in der Funktion aufgerufen. Auf den Wert der Array-Variablen kann in der Rückruffunktion nicht zugegriffen werden, aber auf das Längenattribut. Ich bin sehr verwirrt und weiß nicht, wie ich es lösen soll.

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() ist eine Funktion, die ich in anderen Modulen definiert habe

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

Antworte allen(4)
伊谢尔伦

因为

for (var i = 0; i<10; i++) {
   setTimeout(function(){console.log(i)});
}

for (var i = 0; i<10; i++) {
    (function(i){
       setTimeout(function(){console.log(i)});
    })(i)
}

所以

for(var i=0;i<bookARR.length;i++){
    (function(i) {
        Book.getBookByISBN(bookARR[i],function(err,book){
            if(!book||err){
                console.log("huidiao"+bookARR.length)
                console.log("在里面"+bookARR[i]);
                newBook.push(bookARR[i]);
            }else{
                newBook_id.push(book._id);
            }
            ep.emit('examine');
        })
    })(i);
}
巴扎黑

在callback 中带上 bookARR[i]

左手右手慢动作

前面已经说了原因了,其实就是在你定义Book.getBookByISBN()这个函数里面的回调调用的地方传入bookArr[i]就好了,理解一下形参和实参

漂亮男人

这是个典型的异步问题,i的作用域还在其中。
因为异步等你 getBookByISBN 方法调用callback的时候 i=bookARR.length。这已经越界了,所以是undefined.

解决方:
1.闭包
2.let

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!