2017-05-12 3 views
0

これは、Javascriptでネストされたコールバックをインデントするための推奨された方法ですか?私は、彼らがネストされたコールバックの次の構文を使用し、いくつかのAPIのドキュメントで見てきた

webmap = new WebMap({ 
    portalItem: { 
    id: "id" 
    } 
}) 
    .load() 
     .then(function(instance){ 
      console.log(instance); 
      view = new MapView({ 
       map: instance, 
       container: "map" 
      }) 
       .then(function(instance){ 

       }) 
      ; 
     }) 
    ; 
; 

が、これはJavaScriptでネストされた呼び出しを構文に推奨される方法ですか?

また、なぜですか? Pythonから来る人として、それはとても不思議で不必要なようです。誰でも好奇心旺盛であれば

は、私はあなたがPromiseインターフェイス(またはそれに似たもの)を使用しているので、あなたが実際に使用していないhttps://semantic-ui.com/modules/sidebar.html#/examples

+4

コードの書式設定は主観的なトピックであり、スタックオーバーフローに関する標準的な答えがないため、スタイルガイドを使用することをお勧めします。人々は、回答の質の代わりに自分の意見に基づいて投票します。 FWIW私はそのようなコードをフォーマットする人は誰も見たことがありません。 – 4castle

答えて

3

、あなたはそれが本当に必要であるかどうかを確認することをお勧めします。あなたの場合はそうではありません。外側のチェーンへの内部then通話移動:

webmap = new WebMap({ 
    portalItem: { 
     id: "id" 
    } 
}).load().then(function(instance){ 
    console.log(instance); 
    // return (!) the promise, instead of applying a nested `then` 
    return new MapView({ 
     map: instance, 
     container: "map" 
    }); 
}).then(function(instance){ // the `then` is now on the outer chain. 

}); 

をこのようにインデントの深さは、約束(あなたもそれらを使用する)の利点の一つである、合理的なまま。

+0

はい。ネストされた関数呼び出しは、.then()呼び出しが防止するためのものです。 –

+0

ああ、それはもっと有望ですよね。 – Mojimi

+0

'MapView'から内側の約束を返し、それを外側の' then'で処理するのは良い点です。 – Dai

1

セマンティック宇井さんの例では、主にインデントのこの方法を見てきました従来の意味でのネストされたコールバック - の後にMapViewの構築が1としてカウントされるのを見ましたが。

同じ一連のイベントに対する呼び出しは、同じインデントレベルでなければなりません。入れ子にされたイベントシーケンスは、同じレベルのすべてのイベントを保持する必要があります。これは私がそれをフォーマットする方法を次のとおりです。あなたは、矢印関数の構文を使用して、これはより簡潔にすることができ

webmap = new WebMap({ 
     portalItem: { 
      id: "id" 
     } 
    }) 
    .load() 
    .then(function(instance) { 
     console.log(instance); 
     view = new MapView({ 
      map: instance, 
      container: "map" 
     }) 
     .then(function(instance) { 

     }); 
    }); 

注:

webmap = new WebMap({ 
     portalItem: { 
      id: "id" 
     } 
    }) 
    .load() 
    .then(instance => { 
     console.log(instance); 
     view = new MapView({ 
      map: instance, 
      container: "map" 
     }) 
     .then(instance => { 

     }); 
    }); 

あなたが外に匿名optionsオブジェクトを移動した場合可読性を向上させることができイベントのシーケンスが返されますが、MapViewコンストラクタのoptionsはこの場合はオプションではないinstanceの値をとります。

しかし、あなたができるWebMapコンストラクタのために:あなたは深くネストされたthen電話を持っている場合は

var webMapOption = { portalItem: { id: "id" } }; 
webMap = new WebMap(webMapOptions) 
    .load() 
    .then(instance => ...); 
+0

4行目に '}'がありませんので、どうすればいいのか分かりましたが、それを修正できれば分かります。 – Mojimi

+0

@Mojimiありがとうございます。私はそれを修正しました。 – Dai

+0

@Mojimi、これを正しい答えにするというあなたの決定を再訪することは賢明でしょう。上記のコードは、あらゆる種類の標準的な規約に従ってフォーマットされていません(IMOのように見えます)。標準JS(https://standardjs.com/rules.html)での作業を確認してください。 –

関連する問題