2015-01-04 2 views
-1

나는 Q.lib를 처음 사용했습니다.Q 지연을 사용하면 어떤 이점이 있습니까?

언제 Q.defer를 사용해야합니까?

어떤 이점이 있습니까?

q.defer로 약속을 되돌릴 수 있습니까? 질문 라이브러리의 주요 저자의

var deferred = Q.defer(); 
FS.readFile("foo.txt", "utf-8", function (error, text) { 
if (error) { 
    deferred.reject(new Error(error)); 
} else { 
    deferred.resolve(text); 
} 
}); 
    return deferred.promise; 
+1

설명서의 어떤 부분을 이해하지 못합니까? – SLaks

+0

[** 기존 콜백 API를 약속으로 변환하는 방법 **] (http://stackoverflow.com/questions/22519784/how-do-i-convert-an-existing-callback-api-to) - 증진). –

답변

3

하나는 (여전히 몇 가지 구체적인 응용 프로그램을 않지만) Q.defer()이 부자연스럽고 오래된한다는 an article를 작성했습니다.

더 현대적인 접근법 (이 기사의 내용)은 공개형 생성자 패턴입니다. 이것은 또한 ES6 약속 표준 (defer이 표준에 포함되지 않음)에 접근, 그래서 당신은 그것을 사용할 때 사용하는 것이 가장 좋은 선택이다 :

return Q.Promise(function (resolve, reject) { 
    FS.readFile("foo.txt", "utf-8", function (error, text) { 
     if (error) { 
      reject(new Error(error)); 
     } else { 
      resolve(text); 
     } 
    }); 
}); 

하지만 생각 (에 도착하는 것은) 질문의 요지 인 Q.defer()과 위의 패턴은 약속을 생성하지 않는 Async API로부터 약속을 만들 때 유용합니다. 코드에서 약속을 사용하는 경우 믹싱 및 매칭보다는 모든 비동기 코드에 약속을 사용하는 것이 좋습니다. Q.Promise() 생성자와 Q.defer()을 사용하면 해당 간격을 연결할 수 있습니다.

참고 : 노드 스타일 API로 작업하고 있으므로이 용도로 특별히 설계된 간단한 기술이 있습니다. Q.nfbind을 사용하여 노드 스타일 비동기 함수를 약속을 반환하는 함수로 변환 할 수 있습니다.

var readFile = Q.nfbind(FS.readFile); 

readFile("foo.txt", "utf-8").then(function (data) { 
    console.log("Got the file!"); 
});