비즈니스 시나리오 가정:
RSS 주소를 통해 RSS를 받아 파일에 저장하면 RSS 주소가 파일에 저장됩니다.
이 시나리오의 비즈니스를 완료하려면 다음 3가지 작업을 완료해야 합니다.
1. 파일에서 RSS 주소를 읽어옵니다.
2. RSS를 받으세요.
3. 파일에 저장합니다.
마지막으로 이 세 가지 작업을 통합합니다.
준비:
RSS 주소가 저장되어 있는 파일, address.txt.
http://programmer.csdn.net/rss_programmer.html
작업 1:
RSS 주소 파일의 내용을 읽어 콜백을 통해 반환합니다.
미션 2:
RSS 주소를 통해 RSS를 받고 콜백을 통해 오류나 데이터를 반환합니다.
미션 3:
RSS를 파일에 저장하고 콜백을 통해 오류를 반환합니다.
통합:
위의 코드는 비동기 로직의 반환을 처리하기 위해 가장 일반적인 콜백을 사용하는 완전 비동기 처리입니다. 장점은 누구나 쉽게 받아들일 수 있는 표준 작성 방법이라는 것입니다. 단점은 결합이 너무 강하다는 것입니다. 예외 처리는 번거롭고 코드는 직관적이지 않습니다. 특히 복잡한 비즈니스 로직과 여러 처리 작업을 처리할 때 콜백 계층은 사람들의 눈을 현혹시켜 코드 유지 관리를 어렵게 만들 수 있습니다.
Promise/A 사양 구현 중 하나인 when.js는 이 문제 영역을 겨냥하고 있습니다.
변형된 코드를 살펴보겠습니다.
미션 1:
deferred.promise를 반환합니다.
}
deferred.promise를 반환합니다.
}
任务3:
deferred.promise를 반환합니다.
}
합:
解释:
약속/A规范결정은 "연기/약속"模型就是 "发布/订阅者"模型,일반적으로Deferred对象发布事件,可以是完成resolve事件,或者是失败reject事件;communicationPromise对象进行对应完成或失败的订阅。
현재 Promises/A规范中 ,每个任务city有三种状态:默认(보류 중)、完成(이행)、失败(거부됨)。
1.默认状态可以单向转移到完成状态,这个过程叫resolve, 对应的 方法是deferred.resolve(promiseOrValue);
2.默认状态还可以单向转移到失败状态,这个过程叫reject , 对应的 方法是deferred.reject (이유);
3.默认状态时, 还可以过deferred.notify(update)来宣告任务执行信息,如执行进titude;
4.현재 보류 중인 차량이 하나뿐이고, 대기 중인 차량이 대기 중입니다.
조명상대형.
일반적으로 when.defer는 deferred로 결정됩니다.
var deferred = when.defer();
异步数据获取成功后,发布一个完成事件。
deferred.resolve(데이터);
异步数据获取失败后,发布一个失败事件。
지연.거부(err);
并且返回Promise对象작성为订阅使사용。
지연된 반환 약속;
订阅是通过약속한 다음 방법을 실행하세요/失败/통지적订阅.
getRssAddress('address.txt')
.그러면(getRss)
그런 다음에는 3个参数 ,分别是onFulfilled、Rejected、onProgress
promise.then(onFulfilled, onRejected, onProgress)
上一个任务被resolve(data), onFulfilled函数就会被触发, data 作为它的参数.
上一个任务被거부(이유),那么onRejected就会被触发,收到이유。
任何时候,onFulfilled and onRejected증오只有其一可以被触发,并且只触发一次。
对于处理异常,when.js를 也提供了极其方便的방법으로 能传递错误,多个任务串行执行时,我们可以只们可以只에서最后一个乪乪거부됨. 캐치하세요.
如此写法简单明了。
약속하세요.仅是基本使사용,when.js提供的功能远远不止本文提到的这些,具体参光官方API。