2017-11-23 44 views
2

私はA First Reason React app for Javascript developersなぜresolve()を呼び出す必要がありますか?

で理由の例を見ていると私はbs-fetchを使用しているとき、彼はJs.Promise.resolveを呼び出していることを参照してください。

RepoData.fetchRepos() 
    |> Js.Promise.then_(repoData => { 
     handleReposLoaded(repoData); 
     Js.Promise.resolve(); 
    }) 
    |> ignore; 

私もBuckleScriptコードに似たコードを見てきました。 Bucklescript Cookbook例えば:私たちは新しい約束を作成するときの約束を返す関数を使用しない場合

Js.Promise.(
    Fetch.fetch "https://api.github.com/users/reasonml-community/repos" 
    |> then_ Fetch.Response.text 
    |> then_ (fun text -> 
     text 
     |> names 
     |> Array.iter Js.log 
     |> resolve) 
    |> ignore 

JSで我々は通常、resolveを呼び出します。上記の場合、なぜresolveに電話する必要がありますか?

答えて

5

Js.Promise.then_は、新しい約束が返されることを要求します。

なぜなら、es6の約束事はきちんとタイプされていないからです。 thenコールバックで返される値は、常に約束を返し、決してネストされた約束を返さないように、ラップまたは(無限に)フラット化されます。つまり、返される値(let then_: ((_ => 'a), Js.Promise.t(_)) => Js.Promise.t('a))を許可し、その値が約束('a = Js.Promise.t('b))の場合、戻り値の型はJs.Promise.t(Js.Promise.t('b))ですが、返される値は実際にはJs.Promise.t('b)に平坦化されます。

then_を受け取ると、コールバックからの約束だけを受け入れることで、ネストされた約束を返すことがより明白になります。 resolveでも可能ですが、タイプはまだ音ではありませんが、足で自分を撃つのが少し難しくなります。

将来(おそらく近い)将来には健全で洗練された約束事のAPIがありますが、設計や実装にはそれほど時間がかかりません。

+0

です。 OKは意味をなさない。新しいAPIを楽しみにして、 '解決する 'ことを忘れることができなくなることを願っています。ありがとう! – 599644

関連する問題