j'ai le code suivant:coffeescript champs variables sur la fonction de rappel node_redis
genUserLeagueDiscussionTable = (userLeagueId, firstEntry, displayEntries) ->
# Generate League Discussion
leagueDiscussionTable =
striped: yes
bordered: yes
hover: no
condensed: yes
columns: [{head:"Name"}, {head:"Comments"}]
console.log "get userLeague #{userLeagueId}"
LeagueId = userLeagueId
getLeagueDiscussionEntries = (entry, callback) =>
getDiscussionEntry = (err,cnreply) ->
setDiscussionTableRows = (err,replyObj,request) ->
leagueDiscussionTable.rows[entry.dataentrynum].data = [replyObj.nickname,cnReply.entryText]
console.log "Reply received for entry ",entry.entrynum
console.log cnreply.entryText
loginclient.hgetall 'uid:'+cnReply.postingUid, setDiscussionTableRows
callback()
lookupentry = entry.lookupentry
console.log "getting entry for ", entry, " database key ", lookupentry
leagueclient.hgetall lookupentry, getDiscussionEntry
getLeagueInfo = (err,lreplyObj) =>
console.log "got league info", lreplyObj
leagueDiscussionTable.caption = lreplyObj.leagueName+" League Info"
console.log "caption", leagueDiscussionTable.caption
leagueDiscussionEntries = lreplyObj.currentDiscussionEntry
console.log "Caption ",leagueDiscussionTable.caption," entries ", leagueDiscussionEntries, " Display Entries ",displayEntries
lastEntry = Math.min(leagueDiscussionEntries,firstEntry+displayEntries)
console.log "start entry ", firstEntry, " last entry ", lastEntry
entries=[]
for num in [firstEntry..lastEntry]
console.log num,".a"
entries[num]={}
entries[num].entrynum=num
console.log num,".b"
entries[num].lookupentry="userLeagueId:#{LeagueID}:discussionEntryId:#{entry}"
console.log num,".c"
entries[num].dataentrynum = num-firstEntry
console.log num," ", entries[num]
console.log "Lookup the entries ", entries
async.forEach entries, getLeagueDiscussionEntries
, (err,reply) ->
console.log "callback 1"
leagueclient.hgetall "userLeagueId:#{LeagueId}", getLeagueInfo
return leagueDiscussionTable
Peu importe ce que je fais, je ne peux pas accéder ou userLeagueId dans de ligue getLeagueInfo. Cela fonctionne bien dans le wrapper externe, mais je ne peux pas y accéder à l'intérieur de la fonction de rappel.
Qu'est-ce que je fais mal?
Merci pour l'aide. [Edit] Y at-il un moyen pour moi de passer cela en tant que paramètre à la fonction via l'appel hgetall au rappel?
Fred
Alors ça a marché, mais je ne sais pas pourquoi. Quelqu'un at-il de bons conseils pour une leçon en ligne qui m'aide à savoir où je devrais utiliser les références @ (this) à ce genre de choses? –
Dans votre exemple, vous définissez 'genUserLeagueDiscussionTable' comme un objet avec' getLeagueInfo' comme méthode. Vous passez 'getLeagueInfo' en guise de rappel pour' hgetall', mais quand il est rappelé, la portée où 'LeagueId' a été créé n'est plus disponible. Passer à '@ leagueId' en fait une propriété de' genUserLeagueDiscussionTable', accessible via 'this' quand vous êtes dans' getLeagueInfo', ce qui pointe vers le bon 'car' car vous avez utilisé le symbole' => 'pour le définir. Utilisez '@' lorsque vous utilisez des rappels pour stocker des variables d'instance pour l'accès dans les rappels. –