2016-08-04 16 views
0

だから私はこのような約束を経由してjQueryのAJAXリクエストPASSAしようとしています:then()の内側にうまく機能Everthingjavascriptの約束<value>未定義

var foo; 
foo = bar().then(function(response) { 
    console.log("Success!", response); 
    console.log(foo[0].bool); 
}, function(error) { 
    console.error("Failed!", error); 
}); 

console.log(foo); 

function bar(){ 
    return new Promise(function(resolve, rejected){ 
     $.ajax({ 
      url: 'foo.php', 
      dataType: 'json', 
      success: function (data) { 
       resolve(data); 
      } 
     }).fail(function(xhr){ 
      rejected(xhr); 
     }) 
    }) 
    } 

を、私が欲しい正確に何にconsole.logショーが、私は使用している場合console.log(foo)表示されますPromise { <state>: "fulfilled", <value>: undefined }

ここで何が起こっているのかわかりません、誰でも明示できますか?

+1

期待どおりの結果が得られましたか?私は 'Promise {:" pending "}' –

+1

を期待しています。なぜあなたは手動で約束をしていますか? '$ .ajax'は約束を返します。もしあなたがネイティブの実装に固執したいのであれば、 'Promise.resolve()を使うだけです。(function(){return $ .ajax()})' –

+0

@RolandStarkeオブジェクトの配列のようなものが私の 'foo.php' '[0]:{bool: 'foo'、id: 'bar'}' –

答えて

0

はい、残念なことに、多くの場合、初期段階で多くを上回る非同期javascriptを扱うときの1つです。

あなたがしようとしているものの代わりに、fooと同じ方法で割り当てて、代わりにその約束を渡します。次に、ajaxリクエストの結果が必要な場合は、.then()を使用してください。

foo.then(ajaxResult => console.log(ajaxResult)); 
関連する問題