const DBWrapper = Promise.promisifyAll(require("node-dbi").DBWrapper);
var dbWrapper = new DBWrapper('pg', dbConnectionConfig);
dbWrapper.connect();
dbWrapper.insert('USERS', data, function (err, data) {
if (err) {
console.log("error to insert data: " + err);
} else {
console.log("test" + data);
}
}).then(() => {
//read data
dbWrapper.fetchAll("SELECT * FROM USERS", null, function (err, result) {
if (!err) {
console.log("Data came back from the DB.", result);
} else {
console.log("DB returned an error: %s", err);
}
dbWrapper.close(function (close_err) {
if (close_err) {
console.log("Error while disconnecting: %s", close_err);
}
});
});
})
1
내가 약속을 사용하려면 내가 오류 "형식 오류를 : 속성을 읽을 수 없습니다 '다음'정의의"가지고 있기 때문에 나는 다음과 같은 모듈에 promisifyAll를 사용
A
답변
1
당신은 두 가지가 여기에서 나가는 것은 내가 말할 수있는 것에서 부정확하다.
- 위의 코드에서 약속을 제대로 이행하지 않았습니다. 첫 번째 콜백 오류는 Promise가 반환하는 메소드를 호출 할 때 전달되지 않고 결과 값을 가장 가까운
.then()
에 전달합니다. 오류가 발생하면 가장 가까운.catch()
으로 전달합니다..catch()
이없고 오류가 발생하면unhandledRejection
오류가 발생합니다. - 기본적으로
promisifyAll()
은 약속 된 메서드에Async
이라는 접미사를 추가하므로dbWrapper
에있는 메서드 호출을 수정해야합니다. ``insertAsync` :node-dbi
가정
는 promisifed 수 있으며, 처음 약속
const Promise = require('bluebird');
const DBWrapper = require("node-dbi").DBWrapper;
const dbWrapper = Promise.promisifyAll(new DBWrapper('pg', dbConnectionConfig));
return dbWrapper.insertAsync('USERS', data)
.then((data) => {
console.log("test" + data);
//read data
return dbWrapper.fetchAllAsync("SELECT * FROM USERS", null)
})
.then((result) => {
console.log('Data came back from DB.', result);
return dbWrapper.closeAsync();
})
.catch((err) => {
console.log('An error occurred:', err);
});
+0
: 고맙습니다. 시도해 보지만 오류가 있습니다. TypeError : dbWrapper.insertAsync는 함수가 아닙니다. 어떤 생각입니까? –
+0
@RaynD 'node-dbi' 코드를보고 나서 내 대답을 업데이트했습니다. DBWrapper의 * 인스턴스 *에서'promisifyAll()'을 할 필요가 있습니다. 이것은'new'가'DBWrapper'의 인스턴스를 생성하고'DBWrapper'의 프로토 타입이 실제로 함수의 약속 된 버전을 가지고 있지 않기 때문에'DBWrapper'의 * 인스턴스 *를'promisifyAll()'해야하고 DBWrapper 자체는 아닙니다. – peteb
관련 문제
- 1. 오류 : cvMinMaxLoc을 사용하는 동안
- 2. Spring MVC에서 StringTrimmerEditor를 사용하는 동안 오류 400
- 3. xquery 오류 : where 절을 사용하는 동안
- 4. 오류 PDO 래퍼를 사용하는 동안 PHP 끝
- 5. "내부 오류 패턴을 사용하는 동안"Zend_Validate_Regex
- 6. linq 쿼리를 사용하는 동안 런타임 오류
- 7. 논리 오류 루블에서 모듈러스 % 연산자를 사용하는 동안
- 8. ElementTree를 사용하는 동안 정의되지 않은 엔터티 오류
- 9. 오류 시간, w를 사용하는 동안 = template.shape [:: - 1]
- 10. Twisted reactor를 사용하는 동안 오류 메시지를받는 방법?
- 11. 치명적인 오류 C1083 sparsehash 라이브러리를 사용하는 동안
- 12. 오류 동안
- 13. 오류 동안
- 14. 오류 동안
- 15. 오류 동안
- 16. 오류 동안
- 17. Netbeans를 사용하는 모든 JSP 오류 목록 얻기
- 18. 오류 동안
- 19. 오류 동안
- 20. 오류 동안
- 21. 오류 동안
- 22. 오류 동안
- 23. 오류 동안
- 24. 오류 동안
- 25. 오류 동안
- 26. 오류 동안
- 27. 오류 동안
- 28. 오류 동안
- 29. 오류 동안
- 30. 오류 동안
방법을 기대 한대로 promisifyall'Ascyn' 접미사가 후 DB 호출이 올바른지 다음 코드는 작동합니다 fetchAllAsync' –
약속을 사용하려면 왜 콜백을 계속 전달합니까? – Bergi