2016-10-14 5 views
0

私はJavaScriptの約束を学び始めました。しかし、私は約束の概念を理解できません。 私に最も気になることは、誰が解決者と拒否機能を約束しているコンストラクタに渡しているかということですか?ジャバスクリプトの私の理解を決意し、不合格品が定義されていないとして、このスクリプトは、未知の変数のエラーがスローされますことを私に言うように、決意を渡すとメソッドを拒否しない方今すぐいつ、誰が機能を解決してJSの約束を拒否するのですか?

function getImage(url){ 
    return new Promise(function(resolve, reject){ 
     var img = new Image() 
     img.onload = function(){ 
      resolve(url) 
     } 
     img.onerror = function(){ 
      reject(url) 
     } 
     img.src = url 
    }) 
} 

プロミスのこの例を参照してください?

getImage('doggy.jpg').then(function(successurl){ 
    document.getElementById('doggyplayground').innerHTML = '<img src="' + successurl + '" />' 
}).catch(function(errorurl){ 
    console.log('Error loading ' + errorurl) 
}) 

は今、あなたはのgetImageに上記のメソッド呼び出しで使用される上記のような方法で、これらのメソッド(解決と拒否)が渡される唯一の方法は、その後とキャッチを経由している参照してください。

+0

'resolve'と' reject'は 'Promise'に渡す関数のパラメータです。 'Promise'自体がこの関数を呼び出し、2つのパラメータを渡します。 –

+1

比較: 'function cb(解決、拒否){...};新しい約束(cb); - それは助けになる...? – deceze

+0

@decezeそれは私を助けてくれましたが、私はまだ混乱していますが、なぜ "then"と "catch"を使って他のメソッドを渡すのですか?彼らはメソッドが解決し、メソッドを拒否するメソッドを渡すかのように動作しますか? – user3769778

答えて

3

最も悩ましいことは、誰が解決者と拒否の機能を約束のコンストラクタに渡しているかということですか?

誰もいません。

この関数には、約束のコンストラクタによってが渡されます。

渡されたものとしてプロミスコンストラクタの最初の引数として渡す関数。

+0

なぜ解決し、メソッドを拒否するために変数を渡すのですか? 'resolve(url)' この変数は何でも構いません。 – user3769778

+1

リゾルバとリジェクタ関数は変数を 'then'関数に渡しますが、Promise APIでは生成しません。 – Quentin

0

は約束ライブラリがどのようになどのBluebird have published some info背後

人々、作成し、それをキャンセルし、約束やレコード完了、保存状態や進捗状況を追跡するために必要な他のすべてのメタデータとともに、これらの機能を渡しますライブラリは内部的に動作し、詳細はin the Bluebird sourceです。

関連する問題