私はmongodbが新しく、クエリ後にローカル変数を更新する際に問題があります。私はノードjsを使用していると私は私のクエリ結果に応じて更新しようとしているローカル変数を持っているが、それは私の関数がクエリの前に返すようだ。私はノードjsが非同期だが、私はそれに対処するのに問題があることを理解しています。私も、私は、クエリ結果から特定の値を抽出しようとしているが、異なる無関係な問題を抱えているノードjsとmongodb非同期の問題
function userExist(userList, username){
//var usert = new UserSchema()
var exist = false
UserSchema.findOne({userName: username}, function (err, usert) {
if (err) return handleError(err);
if (usert) {
// doc may be null if no document matched
exist = true
}
})
console.log("boolean " + bool)
return exist
\t // return username in userList
// return query
}
:あなたは以下の私のコードを見ることができます。私のスキーマは以下の通りです:
//import dependency
var mongoose = require('mongoose')
var Schema = mongoose.Schema
//create new instance of the mongoose.schema. the schema takes an
//object that shows the shape of your database entries.
var UserSchema = new Schema({
userName: String,
userID: String,
Conversations: [
{
conversationID: String,
messages: [
{
message: String,
messageID: String,
sender: String,
time: String
}
]
}
]
})
//export our module to use in server.js
module.exports = mongoose.model('User', UserSchema)
私は、会話の配列の値を取得し、それを新しい会話を追加し、それをデータベースにプッシュバックしようとしています。
いずれかの質問に対する回答が本当に有益であり、高く評価されます。私はuserExist機能を使用していますどこ
ちょうど明確化のために、これは次のとおりです。
//Verify Username
\t socket.on(VERIFY_USER, (nickname, callback)=>{
\t \t if(userExist(connectedUsers, nickname)){
console.log("user exist")
\t \t \t callback({ userExist:true, user:null })
\t \t }else{
console.log("user does not exist")
\t \t \t callback({ userExist:false, user:createUser({name:nickname, socketId:socket.id})})
\t \t }
\t })
'findOne'は非同期なので、' userExist'は約束を返す必要があります。 –