#javascript #callback #coffeescript
#javascript #обратный вызов #coffeescript
Вопрос:
Я работаю над этим простым классом CoffeeScript в учебных целях и пытаюсь выяснить, должен ли мой метод getMutant иметь обратный вызов. Код, похоже, работает как есть, но в будущем я хотел бы, возможно, запросить базу данных или какое-либо другое своевременное асинхронное событие. Как бы мне написать обратный звонок здесь?
Спасибо!
class Mutant
@MutantArray: []
constructor: (@name, @strength = 1, @agility = 1) ->
@name = @name.toLowerCase(@name)
Mutant.MutantArray.push(@)
attack: (opponentName) ->
opponentName = opponentName.toLowerCase(opponentName)
# Should the method below have a callback since I'm using the result directly below?
opponentExists = Mutant.getMutant(opponentName)
if opponentExists then alert @name " is attacking " opponentName else alert "No Mutant by the name of '" opponentName "' found."
@getAllMutants: () ->
@MutantArray
# Possibly need to add callback?
@getMutant: (name) ->
result = (mutant.name for mutant in Mutant.MutantArray when mutant.name is name)
if result.length > 0 then mutant else null
Wolverine = new Mutant("Wolverine", 1, 2)
Rogue = new Mutant("Rogue", 5, 6)
Rogue.attack("Wolverine")
Mutant.getAllMutants()
Ответ №1:
Ну, этот вопрос немного основан на мнениях, поэтому он может быть отклонен.
Я все же попробую это сделать. Если у вас есть какое-либо хранилище резервных копий за пределами вашего кода, вам нужно будет иметь там несколько обработчиков асинхронности — каждый раз, когда вы переходите к сети / вводу-выводу / базе данных, вы выполняете асинхронность. Я не думаю, что действительно правильно помещать getAllMutants
внутри вашего Mutant
класса. Я адаптировал часть своего существующего кода, чтобы он был getAllMutants
функцией из MongoDB.
getAllMutants: (onError, onSuccess) =>
MongoClient.connect @config.dbUrl, (err, db) =>
if err?
onError("Failed: #{JSON.stringify err}")
else
collection = db.collection(@config.collection)
collection.find().toArray( (err, mutants) ->
if err?
onError(err)
else
unless mutants?
onError("No mutants object found")
unless mutants.length?
onError("No mutants object returned or not an array")
else
onSuccess(mutants)
db.close()
)