나는 약속을 위해서 the 'Q' library을 사용하고 있습니다.결과를 반환하기위한 약속의 올바른 사용
var results = dbContext.query(userCert.conn, dbQuery.BuildQuery(query));
var models = [];
if (!results.hasErr) {
for (var r in results.okPacket.results) {
var m = new model(results.okPacket.results[r]);
models.push(m);
}
}
userCert.conn.end(); // close db connection
dbContext.query(...)
에서 :
var $Q = require('Q');
function execQuery(connection, query) {
console.log("[backend][context] EXEC QUERY: " + query);
$Q.nfcall(connection.query, query)
.then(function (err, results) {
var ret = {};
if (err) {
// log
var errPkt = getErrPacket(err);
console.log("QUERY ERROR[" + errPkt.errCode + ": " +
errPkt.errConst + "]: " + errPkt.errMessage);
ret = {
hasErr: true,
errPacket: errPkt
};
} else {
ret = {
hasErr: false,
okPacket: {
resType: results.constructor.name,
resLength: results.length,
results: results
}
};
}
// is this correct?
return function() {
return ret;
};
})
.then(function (ret) {
// how do I then return ret to the caller?
})
.done();
}
나는 길을 잃은 조금 해요 (가능한 경우)이 작업을 수행하는 다음
는 시나리오입니다. 콜백은 내 응용 프로그램의 하위 수준에서는 괜찮지 만 콜백 스파게티로 가득 찬 접시로 끝내기를 원하지 않았습니다.
을 ... – dandavis
@dandavis :'connection.query'는 데이터베이스 호출이고 비동기식입니다. – IAbstract
그것은 당신이 무엇을 통과하는지에 달려 있습니다; 예 :'.then (alert)'는 함수가 반환 한 인수를 경고합니다. 문제를 혼란스럽게 만들면 좋은 답변을 얻은 것처럼 보입니다. – dandavis