2016-04-08 20 views
2

benim nodejs kodunda for döngüsü var anlamıyorum neconst kullanımı, neden bu davranış?

const saveDocument = co.wrap(function *(documentData, user, locale) { 
    var now = moment(); 
    var creationDateLongString = now.format("YYYYMMDDHHmmss"); 
    var creationDateShortString = now.format("YYYYMMDD"); 

    var outputChildFolder = documentData.code + '_' + creationDateLongString + '_' + documentCounter; 
    var outputFolder = config.files.incomingDocumentsDir + '/' + outputChildFolder; 

    ++documentCounter; 
    yield fs.mkdir(outputFolder) 

    var xmlFileName = documentData.code + "-" + creationDateLongString + ".xml"; 
    var pdfFileName = documentData.code + "-" + creationDateLongString + ".pdf"; 

    const pages = []; 

    for(var index=0;index < documentData.pages.length; ++index) { 
     const page = documentData.pages[index]; 
     var data = new Buffer(page, "base64"); 
     var dataEncoding = imageType(data).mime === "image/png" ? "png" : "jpg"; 
     var fileName = "page" + index + "." + dataEncoding; 
     var targetFilePath = outputFolder + "/" + fileName 
     yield fs.writeFile(targetFilePath,data); 
     pages.push(fileName); 
    } 
... 
} 

yukarıdaki kodda page sadece birinci tekrar bir kez atanır neden olduğu ve diğer tekrarlamalar sırasında aynı değeri tutan . Yani 5 sayfam varsa, bu değişkendeki ilk sayfanın verileriyle 5 kez son bulurum.

Özel bir argüman veya postprocessor olmaksızın düğüm 4'ü çalıştırıyorum. Basitçe npm run ... Belki buradan basit bir şey eksik ama istemci tarafı ES6 kodunu yaparken önce hiç görmedim benim package.json

bir node src/main/myApp.js eşleştiren hangi. Tabii ki, müşteri tarafı kodunun Babel + Webpack'den geçtiği ve sunucu tarafındaki kodun doğrudan düğüm yoluyla gerçekleştiği yönündeki büyük fark.

Small addendum: "eski okul" un neden bir sözdizimi olmadığını ve pages.forEach(.... satırlarında bir şey olmadığını merak ediyorsanız, bunun yalnızca birkaç küçük değişiklik yaptığım varolan kod olduğu içindir.

+0

olarak değiştirildiğini görebilirsiniz, aynı sonucu alamıyorum. Daha fazla kodunuzu göster lütfen. (ayrıca ... 'var' ->' let') –

+0

Var -> hatıraları da biliyorum. Bu yüzden son paragraftaki sözüm. Dosyanın tamamını düzeltmek için gitmiyordum. –

cevap

2

Bu, sıkı modda beklediğiniz gibi çalışacaktır. Yalnızca aslında saygı ve anahtar kelime uygula (Düğüm gibi) ortamlarda bu davranışı göreceksiniz

"use strict"; 

... eklemeyi deneyin. Babel, ES5 uyumluluğu sağlamak için şimdi let ve const ile var arasında dönüştürür. Göstermek için, bu Babel example bir göz atın. Çıktının const'un var

+0

Çok teşekkürler! Merak ediyorum, neden kod için ikinci bir zaman için bu döngüyü çalıştırırken bu kodu çalıştırırken bir hata atmıyor? –

+0

Bu yüzden, sıkı modda çalıştığını anlamaya çalışıyordum. Günahımı düzenledim. Teknik olarak bir redeclarasyon olmadığına inanıyorum çünkü const, izin verilmiş gibi bir bloktur. Belirli bir noktada, izin ver ve sabit modun dışında const kullanmaya çalıştığınızda düğüm atıyordu ama şimdi sessiz gibi görünüyor ve bu durumda garip davranıyor bile –

+2

'const' blok-scoped, döngü yeni bir tekrar girdiğinde kapsamı yeniden girer, böylece yeniden bildirebilirsiniz. –