2016-10-29 31 views
0

我怎樣才能擺脫自動生成在我的咖啡腳本返回:避免自動生成的咖啡腳本返回

createHash = (password) -> 
    bcrypt.genSalt 10, (err, salt) -> 
    bcrypt.hash password, salt, (err, hash) -> 
     hash 

我越來越...

createHash = function(password) { 
    return bcrypt.genSalt(10, function(err, salt) { 
    return bcrypt.hash(password, salt, function(err, hash) { 
     return hash; 
    }); 
    }); 
}; 

...但我希望沒有回報的解決方案:

createHash = function(password) { 
    bcrypt.genSalt(10, function(err, salt) { 
    bcrypt.hash(password, salt, function(err, hash) { 
     return hash; 
    }); 
    }); 
}; 

我如何完成這項工作?

+0

重複:http://stackoverflow.com/q/7391493/660921 – Carpetsmoker

回答

0

默認情況下,CoffeeScript的函數返回其最後一個表達式的值,以這樣的:

f = -> 
    # Bunch of interesting things... 
    6 

等同於:

f = -> 
    # Bunch of interesting things... 
    return 6 

因此出現在transpiled JavaScript中return秒。

在JavaScript中,沒有明確的return功能隱含返回undefined所以這些返回相同的事情:

function() { } 
function() { return } 
function() { return undefined } 

把這兩件事情一起給你兩個選擇:

  1. 拋出一個undefined在您的函數的底部繞過明確的暗示return

    createHash = (password) -> 
        bcrypt.genSalt 10, (err, salt) -> 
        bcrypt.hash password, salt, (err, hash) -> 
         hash 
        undefined 
        undefined 
    
  2. 或者更好的,明確地表明你沒有一個空return返回:

    createHash = (password) -> 
        bcrypt.genSalt 10, (err, salt) -> 
        bcrypt.hash password, salt, (err, hash) -> 
         hash 
        return 
        return 
    

第二個選項應該給你正是你尋找的JavaScript:

var createHash; 
createHash = function(password) { 
    bcrypt.genSalt(10, function(err, salt) { 
    bcrypt.hash(password, salt, function(err, hash) { 
     return hash; 
    }); 
    }); 
}; 
+0

謝謝你這樣工作! – Timo