Promise&Generator――幸せに同期方法で異歩JavaScriptを書く
4593 ワード
最近は自分のサイトを書いていますが、無意識のうちに5コール関数が組み込まれた怖いコードを
1.JavaScript非同期解決案はどれがありますか?
実は、非同期は爬虫類を書いて合併数を制御したいです. は、フロントエンドのコードを書くときは、 .バックエンドコード 2.Promise&Generator簡単入門
2.1 Promiseは このようなオブジェクトはしばしば非同期の方法をカプセル化している.非同期方法では、いつ成功するかを 非同期が成功した時もあれば、間違いがあった時もあります.オブジェクトは、非同期終了後の動作(正確な処理関数/エラー処理関数)を この 2.2 Generator関数の内部は 関数は、エルゴードを返します.このエルゴードは ES 6の知識の他の特性については触れませんが、同じ(yi)ステップコードを書くなら、これらを身につけるだけで十分です.
3.Co
とんとんと音がします不思議な 4.同期の書き方で、同期のコードを書く方法
ここには非同期処理のコードが展示されています.同期の書き方は本当にさわやかです.
シーンを使う方法が一番いいです.でも、
文の中に何か間違いや不適切なところがあれば、指摘してください.ありがとうございます.お互いに勉強してこそ上達できるのですね.
callback
で書きました.気がつくと自分にびっくりさせました.これはいけません.醜くて見られません.そこで、流行の非同期の解決策を試してみるつもりです.さんざん苦労して、やっと自分が満足できるプランを見つけました.でも、正式に紹介する前に他の関連知識を紹介しましょう.1.JavaScript非同期解決案はどれがありますか?
実は、非同期
JavaScript
はもう高級なものではありません.Nodejs
の出現、特にcallback hell
の恐ろしい書き方は成功しました.ここで尤雨渓大神のこの小さい短文を見て、非常に簡潔に現在よく使われているasync.js
、Promise
、co
、async/await
、async.js
を紹介しました.個人的には機会があれば全部試してみてもいいです.個人的には以下の基準で選ぶかもしれません.API
を使います.それはいくつかのPromise
があります.やはり便利です.ajax
を考慮する傾向があります.フロントエンドの非同期シーンは、一般的にはisomorphic-fetch
以外にも多くないようです.しかも前にnodejs
を使ったことがあります.とてもいい感じです.前の文章が読めます.co
は、es7
以外のものではない.尤雨渓大神によると、async/await
のPromise & Generator
もただのco
の文法飴です.Promise
は、Generator
とco
とを結合した神のような倉庫である.本論文は主にPromise
がGenerator
とES6
とを結合する非同期の解決方法である.Promise
はいいものです.そのうちのGenerator
とPromise
は精華の一部と言えます.簡単に入門を紹介します.Generator
及びES6
です.このセクションの紹介は簡単で、しかもこの二つの新しい特性の一部にすぎません.もちろん、学習の角度から、本を探して完全にこの2つの特性を理解するべきです.少なくとも印象があります.NCZ
の学習はPromise
のUnderstanding ECMAScript 6または阮一峰大神のES 6標準入門を読むことができます.電子書籍があります.素晴らしいです.前者の言葉は分かりやすくて、面白いです.後者はもっと詳しくて、筋道があります.これらの特性についてよく知っているなら、このような細かい点は見なくてもいいです.2.1 Promise
ES6
には多くのバージョンがあり、多くの実装ライブラリがありますが、ここでは主にpromise
規格の内容を紹介します.以下のいくつかの特性を読んで分からないと思ったら、先に上の二つの本の該当する章を見てください.Promise
に関して、まず対象であることを意識します.このようなオブジェクトはNodejs
のコンストラクタで作成することができ、promise
自体のいくつかのデフォルトの戻りによってもこのようなオブジェクトを取得することができる.Pending
オブジェクトは、3つの状態があります.Fulfilled
、Rejected
、resolve
.それぞれ未スタートの状態、成功の状態、失敗の状態に対応しています.reject
とthen
によって規定し、いつが間違っているかを判定しながら、パラメータをこの2つの関数に渡す.これらのパラメータは非同期で得られた結果またはエラーです.catch
およびthen
の方法で規定する.catch
およびPromise.prototype
はpromise
上の関数であり、したがって、「実装」の後(実際には本当の例ではない)はそのまま使用できる.then
オブジェクトにはもう一つの不思議なところがあります.promise
の各々はGenerator
オブジェクトを返し、上記のように非同期が待って、所定の正しい処理関数かエラー処理関数かを選択する.yield
関数は、星付き関数であり、一時停止可能な関数である.yield
を介して関数を推進する.value
の後の値を定義することによって、戻りのnext
が決定される.yield
方法でオブジェクトを取得できます.このオブジェクトはCo
によって定義されたパラメータを含んでいます.3.Co
とんとんと音がします不思議な
tj
が登場しました.これはGithub
大神が書いたライブラリです.使い方は簡単です.Co
上のREADMEもはっきり言いました.主に2点です.generator
関数にはgenerator
関数が含まれています.yield promise
関数にはCo
オブジェクトが含まれています.next
の内部実装では、promise
関数を再帰的に呼び出して、各Co
の値を返して、非同期の表記を実現する.promise
関数は、then
オブジェクトに戻り、catch
、Generator
方法を呼び出して、Node
関数が返された結果を伝達することができる.後続の成功処理やエラー処理が容易です.ここには非同期処理のコードが展示されています.同期の書き方は本当にさわやかです.
function *foo(res, name, newPassword, oldPassword) {
try {
// yield promise , catch , user。
const user = yield new Promise(function(resolve, reject) {
//
User.get(name, function(err, user) {
if(err) reject(err)
resolve(user)
})
})
if(user.password != oldPassword) {
return res.send({errorMsg:" !"})
}
// “ ” , , ~ debug~
yield new Promise(function(resolve, reject) {
User.update(name, newPassword, function(err) {
if(err) reject(err)
res.send({msg: " !"})
resolve()
})
})
} catch(e) {
console.log("Error:", e)
return res.send({errorMsg:"Setting Fail!"})
}
}
// co Generator 。
co(foo(res, name, newPassword, oldPassword))
5.まとめシーンを使う方法が一番いいです.でも、
Co
と書いているうちに地獄に帰るという悩みがありましたら、試してみてもいいですか?同期書きで異歩を書く感覚は本当に素晴らしいです.文の中に何か間違いや不適切なところがあれば、指摘してください.ありがとうございます.お互いに勉強してこそ上達できるのですね.