수색…


콜백 약속하기

콜백 기반 :

db.notification.email.find({subject: 'promisify callback'}, (error, result) => {
   if (error) {
       console.log(error);
   }

   // normal code here
});

이것은 bluebird의 promisifyAll 메소드를 사용하여 위와 같이 일반적으로 콜백 기반 코드가 무엇인지를 약속합니다. bluebird는 객체에있는 모든 메소드의 약속 된 버전을 만들 것이며 약속 기반 메소드 이름에는 비동기가 추가됩니다.

let email = bluebird.promisifyAll(db.notification.email);

email.findAsync({subject: 'promisify callback'}).then(result => {

    // normal code here
})
.catch(console.error);

특정 방법 만이 promisified 될 필요가 있다면, 그것의 promisify를 사용하십시오 :

let find = bluebird.promisify(db.notification.email.find);

find({locationId: 168}).then(result => {
    
    // normal code here
});
.catch(console.error);

메서드의 직접적인 객체가 두 번째 매개 변수에 전달되지 않으면 promisified 할 수없는 일부 라이브러리 (예 : MassiveJS)가 있습니다. 이 경우 두 번째 매개 변수에서 promisified 할 필요가있는 메서드의 즉각적인 객체를 전달하고 컨텍스트 속성에 동봉합니다.

let find = bluebird.promisify(db.notification.email.find, { context: db.notification.email });

find({locationId: 168}).then(result => {

    // normal code here
});
.catch(console.error);

수동으로 콜백 약속하기

때로는 콜백 함수를 수동으로 약속해야 할 수도 있습니다. 이것은 콜백이 표준 오류 우선 형식을 따르지 않는 경우 또는 promisify하기 위해 추가 논리가 필요한 경우 일 수 있습니다.

fs.exists (path, callback) 예제 :

var fs = require('fs');

var existsAsync = function(path) {
  return new Promise(function(resolve, reject) {
    fs.exists(path, function(exists) {
      // exists is a boolean
      if (exists) {
        // Resolve successfully
        resolve();
      } else {
        // Reject with error
        reject(new Error('path does not exist'));
      }
    });
});

// Use as a promise now
existsAsync('/path/to/some/file').then(function() {
  console.log('file exists!');
}).catch(function(err) {
  // file does not exist
  console.error(err);
});

약속 된 setTimeout

function wait(ms) {
    return new Promise(function (resolve, reject) {
        setTimeout(resolve, ms)
    })
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow