JavaScript는 비동기식이 특징입니다. JavaScript는 기다릴 수 없습니다. 기다릴 필요가있는 것을 구현하면 그곳에서 멈추고 결과가 돌아올 때까지 기다릴 수 없습니다. 반대로, 결론은 콜백 콜백을 사용하는 것입니다. 함수를 정의하여 결과를 사용할 수있을 때까지 호출 할 수 있습니다.
이 콜백 모델은 우수한 코드 구성에 아무런 문제가 없지만 원래 콜백에서 약속으로 전환하여 많은 문제를 해결할 수도 있습니다. 약속을 표준 데이터 컨테이너로 취급하여 코드 조직을 단순화하고 약속 기반 아키텍처가됩니다.
약속이란 무엇입니까?
약속은 ".then ()"메소드가있는 객체이며, 아직 알려지지 않은 작업의 결과를 나타냅니다. 누가이 개체에 액세스하든 그는 ".then ()"메소드를 사용하여 콜백을 추가하여 작업이 성공적으로 결과 또는 실패를 기다릴 때까지 기다릴 때까지 콜백을 추가 할 수 있습니다.
그렇다면 왜이 작업을 수행 할 때의 이점이 콜백보다 더 나은가? 표준 콜백 모드는 요청을 처리 할 때 동시에 콜백 기능을 제공해야합니다.
request (url, function (error, response) {// 성공 또는 오류 처리.}); dosomethingelse ();불행히도,이 코드는이 요청 기능이 언제 완료 될지 알지 못하고 물론 필요하지 않음을 의미합니다. 우리는 마침내 콜백을 통해 결과를 전달합니다. 이로 인해 여러 콜백이 중첩 된 콜백 또는 콜백 트랩을 형성하게됩니다.
QueryTheDatabase (query, function (error, result) {request (url, function (error, response) {doSomethingELSE (응답, 함수, 결과) {doAnotherthing (result, function (error, result) {request (exerurl, function (error, response));});});약속은 낮은 수준의 코드가 요청을 생성 한 다음 미완성 된 작업을 나타내는 객체를 반환 함으로써이 문제를 해결할 수있어 발신자가 추가해야 할 콜백을 결정할 수 있습니다.
약속이란 무엇입니까?
약속은 비동기 프로그래밍의 추상화입니다. 값을 반환하거나 예외를 던지는 프록시 객체입니다. 일반적으로 약속 객체에는 당시의 방법이 있습니다. 이 방법은 우리가 반환 값을 얻는 방법 (약속의 성공적인 이행의 결과 값을 이행이라고 함) 또는 예외를 던지는 방법입니다 (약속을 거부하는 이유는 거부라고합니다). 그런 다음 두 가지 선택적 콜백을 매개 변수로 사용하여 성취 및 재판매를 호출 할 수 있습니다.
var promise = dosomethingaync ()
약속.
이 약속이 해결되면, 즉, 비동기 프로세스가 완료된 후에는 성취되고 재판매가 호출됩니다.
따라서 약속에는 다음과 같은 세 가지 상태가 있습니다.
■ 약속 대기 중 - 초기 약속 상태
■ 이행 된 구현 약속-성공적인 구현 상태 약속
■ 헌신 거부 거부 - 약속이 실패한 국가
콜백 (출력 인쇄)을 사용하여 파일을 읽은 후 다음은 읽기 파일을 케이스로 가져 가야합니다.
readFile (function (err, data) {if (err) return console.error (err) console.log (data)})readfile 함수가 약속을 반환하면 다음과 동일한 논리를 구현할 수 있습니다 (출력 인쇄).
var promise = readfile ()
약속.
여기에 우리는 비동기 작업을 나타내는 가치 약속이 있습니다. 우리는이 가치 약속을 항상 전달할 수 있습니다. 이 값에 액세스하는 사람은 누구나 사용하여 소비 할 수 있습니다. 이 값으로 표시되는 비동기 조작이 완료되었는지 여부에 관계없이,이 약속으로 대표되는 비동기 조작은 한 번만 실행되거나 상태가 이행되거나 거부되기 때문에 비동기 결과가 변경되지 않도록 보장 할 수 있습니다.
약속을 이해하십시오
약속은 매일 직관과 다를 수 있습니다. 이해하려면 몇 가지 중요한 원칙을 명심해야합니다. ()는 항상 새로운 약속을 반환합니다. 다음 코드에 표시된대로 :
var promise = readfile ()
var promise2 = promise.then (Readanotherfile, console.error)
여기서 당시 매개 변수 readanotherfile, console.error는 비동기 작업이 성공하거나 실패가 성공한 후에 반사 된 조치가 완료된 작업을 나타냅니다. 즉, readanotherfile 함수가 실행 된 후에는 실패한 인쇄 레코드가 잘못되었습니다. 이 구현은 두 가지 방법으로 만 가능합니다.
다음 코드를 살펴 보겠습니다.
var promise = readfile () var promise2 = promise.then (function (data) {return readanotherfile () // readfile이 성공하면 readanotherfile}, function (err) {console.error (err) // readfile이 성공하지 못하면 Recorte retud returnotherfile ()}))) promice. readanotherfile 함수의 실행 결과그런 다음 약속을 돌려주기 때문에, 그것은 콜백 지옥을 피할 수있는 일련 체인을 체인함으로써 약속을 지출 할 수 있음을 의미합니다.
readfile (). then (readanotherfile).
약속 규칙의 두 부분이 분리되어야합니다.
(1). ()은 항상 새로운 약속을 반환합니다. 당신이 그것을 호출 할 때마다 콜백이 무엇을하는지는 중요하지 않습니다.. then ()은 콜백이 호출되기 전에 이미 약속을주기 때문입니다. 콜백의 행동은 약속 약속의 이행에만 영향을 미칩니다. 콜백이 값을 반환하면 약속은 그 값을 사용합니다. 이 값이 약속 인 경우이 값에 대한 약속을 이행 한 후 값을 반환하십시오. 콜백에 오류가 발생하면 약속이 오류를 거부합니다.
(2) .then ()에 의해 반환 된 약속은 새로운 약속이며,이 약속은 .then ()이라는 약속과 다릅니다. 긴 약속의 사슬은 때때로, 모든. () 전화가 새로운 약속을 만들어 낼 것이라는 사실을 숨기고 있습니다. 여기서 주목해야 할 것은 실제로 고려해야 할 것은 마지막 호출. ()가 실패를 나타내는 것이므로이 실패를 포착하지 않으면 오류 예외가 사라지는 것이 쉽다는 것입니다.
어떤 사람들은 .then () 체인 호출이 유창한 스타일과 매우 유사하다고 생각하지만 긴 약속 체인은 혼란스럽고 마침내 의미있는 기능으로 나뉩니다.
function getTasks () {return $ http.get ( 'http://example.com/api/v1/tasks') .then (function (response) {return) {return response.data;});} 함수 getmytasks () {return getTasks () .then (functions (tasks) {tasks, user, user, on. });}이 예에서, 두 기능은 각각 콜백 함수를 전달하는 약속을 얻습니다.
흥미로운 약속
같은 약속은 여러 콜백을 받아 들일 수 있습니다. 약속이 해결되고 구현되면 모든 콜백 함수가 호출됩니다. 또한 약속은 해결 및 구현 후 새로운 콜백을 받아 들일 수 있습니다. 이러한 콜백은 일반적인 방식으로 호출 될 수있어 콜백을 사용하여 간단한 형태의 캐시를 구현할 수 있습니다.
var taskspromise; 함수 getTasks () {taskPromise = taskPromise || getTasksfromtheserver (); return taskPromise;}이 경우 getTasks () 함수를 여러 번 호출 할 수 있으며, 항상 구리 치아의 약속을 반환합니다.
위의 Nodejs 약속의 사용은 내가 당신과 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.