2017-02-17 18 views
1

私の理解では、次のとおりです。約束はどのように作成されますか?次のように約束オブジェクトの

var Promise = { 
    then: function() { ... }, 
    catch: function() { ... } 
}; 

私はその下にこのコードを持っている場合は機能を有しており、プロミスオブジェクト(fetch.js)を返します:

var xhr = require('xhr') 

module.exports = function (uri) { 
    return new Promise(function (resolve, reject) { 
    xhr(uri, function (err, res, body) { 
     if (err) return reject(err) 
     if (res.statusCode !== 200) return reject(new Error(body)) 
     resolve(body) 
    }) 
    }) 
} 

その後、私のindex.jsでI操作を行います。

約束オブジェクトの構造は var promise = fetch("some_url"); Fから返される方法
var fetch = require('./fetch'); 
var promise = fetch("some_url"); 

ormed?

new Promise(...)部分のfetch.jsでは、関数をコンストラクタに渡しています。私は前にこのようなことは何も見ていないし、new Promise(...)の部分のresolverejectのパラメータが、上記のサンプルPromiseオブジェクトのthencatchのキーにどのように渡されるのだろうと思っています。

+1

[ECMAScript 2015,25.4 Promise Objects、ff。](http://www.ecma-international.org/ecma-262/6.0/#sec-promise-objects) – Andreas

+0

それで、「PromiseCapabilityはプロミスオブジェクトをカプセル化するために使用されるレコード値。そのプロミスオブジェクトを解決または拒否できる機能」。しかし、「解決または拒否可能な機能」は、「新しいプロミス(解決、拒否){...}) 'コンストラクタ? – CapturedTree

+1

この投稿を参照してくださいhttps://www.promisejs.org/implementing/リンクされたstackoverflowの質問http://stackoverflow.com/questions/23772801/basic-javascript-promise-implementation-attempt/23785244#23785244 –

答えて

4

私が説明が、エラー

は、その変数 への約束を保存し、その後、怒鳴るの例のように

var a = new Promise(function (resolve, reject) { 
    resolve(1); 
}) 
a.then(); 
機能実行A変数を取り得る解決された値を取得したり、キャッチどのように機能するか、あなたは一例を示しカント

a.then()を実行すると、promiseStatusのPromiseStatusとPromiseValueの2つのパラメータが取得され、解決または拒否され、PromiseValueでは解決または拒否ハンドラで渡された値が返されます

Promise 
__proto__ 
: 
Promise 
catch:catch() 
constructor: Promise() 
then:then() 
Symbol(Symbol.toStringTag):"Promise" 
__proto__:Object[[PromiseStatus]]:"resolved"[[PromiseValue]]:1 
+0

も参照してください[[PromiseValue \] \]はjavascriptコンソールで何を意味し、どうすればよいのですか?](http://stackoverflow.com/questions/28916710/what-does-promisevalue-mean-in- javascript-console-and-how-do-i-get-it) – guest271314

+0

約束の値は、このようなa.then(関数(res){})のような関数のパラメータとしてあなたを得るでしょう。 PromiseValue –

+0

新しいPromiseを作成し、[[PromiseValue]]にアクセスするには、本質的に.thenメソッドがあります(基本的には空です)。そして、thenメソッドに渡された関数と、[[PromiseValue] ]あなたが渡す関数のパラメータに渡されます。 – CapturedTree

関連する問題