Dart 와 js 의 비동기 - Future vs Promise

2417 단어
웹 전단 을 아 는 사람 은 모두 알 고 있 을 것 이다. Promise 전단 비동기 프로 그래 밍 에서 중요 한 위 치 를 차지한다.Dart 의 학습 에서 우 리 는 비동기 프로 그래 밍 방식 을 접 했다. 예 를 들 어 사용 Future, Stream, Completer, Timer 등 이다.
웹 개발 자 에 게 dart 의 전체 비동기 구 조 는 js 와 매우 비슷 하고 해당 하 는 Event Loop 개념 이 있 기 때문에 우 리 는 js 의 경험 으로 dart 를 이해 하고 학습 할 수 있다. 예 를 들 어 js 중의 Promise 과 dart 중의 Future 이 좋 은 예 이다.
Dart 의 비동기 Future 는 js 중의 Promise 와 비슷 하 다.예 를 들 어 js 에서 우 리 는 delay 함 수 를 실현 합 니 다.
function delay(ms) {
  return new Promise(resolve => {
      setTimeout(() => resolve('done'), ms)
  )
}

delay(3000).then(val => {
  console.log(val);
})

dart 에서 도 이러한 기능 을 실현 할 수 있 으 므 로 빌려 야 한다 Completer
Future delay(int ms) {
  final com = Completer();
  final future = com.future;
  Timer(Duration(milliseconds: ms), () {
    com.complete('done');
  });
  return future;
}
//   
delay(3000).then((val){
   print(val);
});

그리고 Promise.race, Promise.all, then, catch, finally, Promise.resolve, Promise.reject 등 은 dart Future 에서 모두 해당 하 는 실현 이 있 었 다.
// any   js  Promise.race
Future.any([delay(3000), delay(1500)]).then((_){
    print('1.5s    ');
});
// wait   js  Promise.all
Future.wait([delay(3000), delay(1500)]).then((_){
    print('3s    ');
});
// error catchError  js  Promise.reject  catch
Future.error('error').catchError(print);

// value   then   js  Promise.resolve then
Future.value('value').then(print);

// whenComplete   js  finally
Future.error('error').whenComplete((){
    print('finally');
});

또한, js 중의 Promiseasync/await 에 호출 할 수 있 으 며, 마찬가지 로 dart 에서 Futureasync/await 에 호출 할 수 있다.
void test() async {
  await delay(1000);
  print('1s    ');
}

물론 Future 에는 Future.microtask, Future.sync, Future.delayed 등 다른 고급 기능 도 있다.
심지어 우리 가 js 에서 Promise 의 실현 원 리 를 알 고 있다 면 우 리 는 Dart 에서 하나의 Promise 를 만들어 하나의 dart-promise 간단 한 실현 을 공유 할 수 있다.https://github.com/w-rudolph/dart-promise

좋은 웹페이지 즐겨찾기