前端小誌(轉型中)

一個用來記錄人老會忘記的地方

Don't release Zalgo!!

2017年08月01日

Don't release Zalgo!!!!! 同場加映Designing APIs for Asynchrony

最主要的一句話

make sure your function always sync or always async.

其實最近看書才知道這個詞,不過以前使用jQuery的時候就有設計過相似的概念。

function getData(url, model) {
    var df = $.Deffered();
    if(model.data) {
      df.resolve(model.data)
    } else async...
    return df;
}

當時的想法也很簡單,我寫了一個getData function有時候直接可以取得,有時候需要非同步很麻煩,乾脆直接包起來就好了,這樣出去以後可以統一.then()多方便,寫著寫著就成習慣了。

最近買了小黃書才知道原來這是個好寫法(寫得好),當然其中還有很多原因,還包括了promise的一些特性,書裡面推崇的是es6的promise,jQuery版本的可能只有make sure your function always sync or always async這個概念。

等有空一點再來介紹。

PS.目前專案是與fetch寫在一起,但我總覺得哪裡還需要改進,譬如說不需要resolve(false),而是由component connect state去判斷是否有成功,對於async await還有try catch的部分還不熟,之後要多爬文囉。

// redux with thunk
(data, url) => (dispatch, getState) => (
  new Promise((resolve) => {
    if(data) {
      dispatch('done');
      resolve(true);
    } else {
      fetch().then(() => {
        dispatch(doSomething()); //塞資料進入store
        dispatch('done');
        resolve(true);
      }).catch((e) => {
        dispatch('error');
        resolve(false);
      });
    }
  })
)

展開Disqus
分類
最近文章
友站連結
© 2019 Ernie Yang