基本的に私のノードアプリケーションのシーケンシングの問題が発生しています。私はチャットルームを作成する必要があります。 3つのコンポーネント:1.)server.js 2.)RoomHandler.js 3. DBService.jsノードサーバコードの承認
ユーザーがcreateRoomをクリックすると、データベースで生成されたroomIdが返されます。 [この操作は、2つのmysqlパーツで構成されています。
1が成功した場合のみ、2が発生します。
ここでリクエストがserver.jsになると、コードのシーケンスは
を行く方法は次のとおりです。
app.post('/createGroupRoom',function(req,res){
var roomData = JSON.parse(req.query.room);
var roomId=roomHandler.createGroupRoom(roomData.roomName,roomData.roomDesc);
res.json({roomNum: roomId});
});
インサイドRoomHandler:
var that = this;
var p = new Promise(function(resolve,reject){
that.dbService.executeQuery(query1,resolve,reject);
});
p.then(function()
{
that.dbService.executeQuery(query2,p.resolve,p.reject);
}).then(function(resultSet){
//resultSet is always coming as undefined
if(resultSet[0] && resultSet[0].id_groupchatroom)
{
console.log("Created groupRoom "+resultSet[0].id_groupchatroom);
return resultSet[0].id_groupchatroom;
}
}).catch(function(err){}).catch(function(err){; });
インサイドDBService:
DBService.prototype.executeQuery = function(query,callback,callbackerr){
console.log("Query to DB : "+query);
var that = this;
this.pool.getConnectionAsync().then(function(connection){
that.Promise.promisifyAll(connection);
connection.queryAsync(query).then(function(resultSet){
connection.release();
callback(resultSet);
}).catch(function(err){
connection.release();
callbackerr(err);
});
}).catch(function(err){
connection.release();
callbackerr(err);
});
}。
Promiseの2番目のチェーンで2番目のクエリのresultSetを取得できません。また、常に次のエラーを返します。コールバックは同じ場所の関数ではありません。 p.resolveは関数ではありません。しかし、私は上記のコードをどのように構造化するのかわかりません。 Javaアプリケーションの場合は、以下のように単純になりました。
server.java:
roomHandler.createRoom(roomData,httpReq,httpResp);
RoomHandler.java:
public void createRoom(Room roomData, HttpRequest req, HttpResponse res)
if(dbService.executeQuery(query1))
{
rs = dbService.executeQuery(query2);
if(rs!=null)
res.end(rs.next());
}
私はこっちのコードをpromisifyしようとしているかどうかわかりません!しかし、コードを最初から順番に並べるほうが良い。どんなヘルプ/チュートリアルも感謝します。
'that.dbService.e..'の返り値がありません – mido