내 데이터베이스 (크래들을 사용하는 couchDB)에 연결하는 모듈을 만들려고합니다. 결국 모듈은 'db'변수를 내 보냅니다.비동기 적으로 NPM 모듈로드
var cradle = require('cradle'),
config = require('./config.js');
var db = new(cradle.Connection)(config.couchURL, config.couchPort, {
auth: {
username: config.couchUsername,
password: config.couchPassword
},
cache: true,
retries: 3,
retryTimeout: 30 * 1000
}).database('goblin'); //database name
//Check if DB exists
db.exists(function (err, exists) {
if (err && exists) {
console.log("There has been an error finding your CouchDB. Please make sure you have it installed and properly pointed to in '/lib/config.js'.");
console.log(err);
process.exit();
} else if (!exists) {
db.create();
console.log("Welcome! New database created.");
} else {
console.log("Talking to CouchDB at " + config.couchURL + " on port " + config.couchPort);
}
});
module.exports = db;
문제는 db.exists가 부르는 비동기입니다, 그것은 존재하지 않는 경우 내가 나머지를 초래, 그것은이 완료되기 전에 변수가 변수를 수출 생각 : 여기
코드입니다 시스템.var db = require('./couchdb.js');
거대한 중첩 콜백을하지 않고 이런 문제를 해결하기 위해 일어나고, 또는 모범 사례에서이 문제를 방지 할 수있는 방법이 있나요 :
는그것은 실행 노드 페이지에 정상적인 방법을 포함하고있어?
참조 용으로 여기에서 전체 응용 프로그램 (https://github.com/maned/goblin)과 프로젝트에서 참조한 버그 (https://github.com/maned/goblin/issues/36)를 볼 수 있습니다.
이것은 좋은 해결책입니다! 지금 시도하고 있지만 db 개체에 문제가 있습니다. 이 스레드는 계속 업데이트됩니다. 콜백을 중첩하지 않아도되도록 intially 시도했지만 (콜백에 코드가 많이 포함됨) 어쩌면 그렇게하는 것이 가장 좋은 방법 일 수 있습니다. – streetlight
콜백에서 다른 기능으로 변경되지 않는 부분이나 "개구쟁이"라고 느끼는 부분을 "폐쇄"할 수 있습니다. 그렇게하면 아주 작은 함수 만 이벤트 처리기를 호출 할 때마다 동적으로 생성됩니다. – wberry