2014-09-11 71 views
-1

我正在讀一本關於backbone.js的書,並且有一個例子使用node.js來構建API的後端。鏈接到書:http://addyosmani.github.io/backbone-fundamentals/爲什麼node.js中有這麼多返回語句

在某些時候有這個代碼

//Update a book 
app.put('/api/books/:id', function(request, response) { 
    console.log('Updating book ' + request.body.title); 
    return BookModel.findById(request.params.id, function(err, book) { 
     book.title = request.body.title; 
     book.author = request.body.author; 
     book.releaseDate = request.body.releaseDate; 

     return book.save(function(err) { 
      if(!err) { 
       console.log('book updated'); 
       return response.send(book); 
      } else { 
       console.log(err); 
      } 
     }); 
    }); 
}); 

我不明白爲什麼有這麼多的return語句,因爲此代碼的工作,以及沒有回報

//Update a book 
app.put('/api/books/:id', function(request, response) { 
    console.log('Updating book ' + request.body.title); 
    BookModel.findById(request.params.id, function(err, book) { 
     book.title = request.body.title; 
     book.author = request.body.author; 
     book.releaseDate = request.body.releaseDate; 

     book.save(function(err) { 
      if(!err) { 
       console.log('book updated'); 
       response.send(book); 
      } else { 
       console.log(err); 
      } 
     }); 
    }); 
}); 

我錯過了什麼嗎?

+0

你沒有錯過任何東西。這不是必需的。糟糕的編碼恕我直言。 – freakish 2014-09-11 11:46:50

+0

兩年後,我肯定知道這是爲了執行一致的回報。 [Eslint規則](http://eslint.org/docs/rules/consistent-return)。 – Buzut 2016-11-18 12:17:20

回答

0

通常情況下,您將看到的是return,用於出現錯誤並希望停止執行相同塊中的下一行代碼的情況。例如:

book.save(function(err) { 
    if (err) 
    return console.log(err); 

    console.log('book updated'); 
    response.send(book); 
}); 

它也有助於節省縮進級別。除此之外,從(異步)回調或事件處理程序返回值通常無用,因爲返回值完全被忽略。

相關問題