약속 콜백에 대한 추상화가 아닌 마법이다입니다. 비동기 코드를 동기식으로 만들 수는 없습니다.
올바른 솔루션입니다 : 당신이 NodeJS (버전 8 이상)를 사용하는 경우, 당신은 적응 할 수있을 것,
const getSize = readStream => {
return new Promise(function (resolve, reject) {
gm(readStream).size({ bufferStream: true }, function (err, size) {
if (err) reject(err);
else resolve(size);
})
});
}
let printSize = async readStream => {
console.log(`Size is ${await getSize(readStream)}`);
}
을 또는 :
는
const res = new Promise(function (resolve, reject) {
gm(readStream).size({ bufferStream: true }, function (err, size) {
if (err) reject(err);
else resolve(size);
})
});
res.then(function(promiseResolutionValue) {
console.log(res)
})
또한 여기 async/await
을 사용할 수 있습니다 귀하의 기능은 util.promisify
입니다.
Bluebird
과 같은 다른 Promise
라이브러리도 '표준'노드 스타일 함수 (인수로 err, data
와 콜백을 가진 함수)를 약속 반환 함수로 쉽게 변환 할 수있는 함수를 제공합니다.
아니면 콜백 만 사용하십시오.
약속을 사용한다고해서 코드가 동기화되는 것은 아닙니다. 'res.then (function (ret) {console.log (ret);})' – Keith
@adeneo에서 냉소적 일 필요는 없습니다. 너는 초보자였다. –
글쎄, 약속, 비동기/대기 및 콜백을 실제로 사용했는지에 대한 질문을하기 전에 무작위 질문을 복사/붙여 넣기하지 않는 한 비동기가 무엇인지 명확하게 알 수 있습니까? – adeneo