2016-07-23 5 views
0

JavaScriptで次のタスクを実行しました。約束を返すgetDataというメソッドを使用してDataBaseオブジェクトを作成します。この約束が解決されると、配列を返します。JavaScriptのスコープ外のデータを使用する

getDataメソッドを呼び出すDataという2番目のオブジェクトを作成します。配列の最初のメンバーの値を返すgetFirstというDataのメソッドを作成します。

私がこのタスクを理解しているなら、コールバック以外の約束から値を割り当てることはできないため不可能です。

(。実際には、タスクはより複雑であるが、私は私が問題を抱えた部分だけを表示するように簡素化しています)

ここでは、私が持っているものです。

function DataBase(){ 
    this.getData = function(){ 
     var data = [1, 2, 3, 4, 5]; 
     return Promise.resolve(data); 
    } 
} 

function Data(d){ 
    this.first = null; 
    that = this; 
    this.getFirst = function(){ 
     return this.first; 
    } 
    this.initialize = function(){ 
     dataBase = new DataBase(); 
     dataBase.getData().then(function(theArray){ 
      console.log(theArray); //works fine 
      that.first = theArray[0]; //doesn't work because promise is asyncronous 
     }) 
    } 
} 

d = new Data(); 
d.initialize(); 
result = d.getFirst(); 
console.log(result)// is null 
+0

になるように、私は仕事を理解しているだろう

は 'Data'ここはコンストラクタだ、この方法ではありません。 –

+0

明確にする必要があります。与えられたように、その仕事はまったくナンセンスです(そして、はい、私にそれを挙げることができます)。または、コースを切り替える:-) – Bergi

+0

お詫び申し上げます。実際のタスクは、メソッドではなく、「オブジェクト」であると述べました。私は元の投稿に私の間違いを修正しました。 – user3520634

答えて

1

はあなたに約束を使用しますinitialize機能とあまりにinitialze関数内からの約束を返す:

this.initialize = function(){ 
    dataBase = new DataBase(); 
    return dataBase.getData().then(function(theArray){ 
     console.log(theArray); //works fine 
     that.first = theArray[0]; //doesn't work because promise is asyncronous 
    }) 
}  

d.initialize().then(function() { 
    result = d.getFirst(); 
    console.log(result); 
}); 
+0

ありがとうTarun。あなたは正しいです。実際、命令にはこれと同じ正確なコードがありましたが、私は明らかな解決策を見失ってしまったので、ちょうど1回初期化したいと思っていました。 – user3520634

+0

ようこそ。あなたはその場合の答えを受け入れることができますか? –

0

あなたの理解は正しいです。

約束を返すgetDataというメソッドを使用してDataBaseオブジェクトを作成します。この約束が解決されると、配列を返します。

getDataメソッドを呼び出すDataという2番目のメソッドを作成します。配列の最初のメンバーの値を返すgetFirstというDataのメソッドを作成します。

これは非常にお粗末な言語です。約束はない返信何か、それらはを達成するいくつかの値を。そして、getFirstは確かに返信最初のメンバー自体ではないが、それの約束を返す

また、それはそれは方法呼ばれるべきではありませんかのためDataは、コンストラクタ /クラスことになっているかどうかは不明です。そうでない場合、「データのためのメソッド」は無意味です。期待される結果は単に

var DataBase = { 
    getData: function() { 
     var array = […]; 
     return Promise.resolve(array); 
    }, 
    getFirst: function() { 
     return this.getData().then(function(array) { return array[0]; }); 
    } 
}; 
関連する問題