2016-04-30 15 views
3

私は次のTypescriptクラスを持っています。私のモバイルアプリケーションでは、ボタンクリックによってトリガーされるClick関数があります。関心のあるビットはtodoItemTable.readで、私のクラウドバックエンドからToDoItemの配列を取得します。現在のコードは動作し、8個のtodo項目のテキストを吐き出しますが、配列にテキストを格納したいので、todosにコメントアウトされた行を見ると、問題を解決できたと思いました。しかし、そのコード行はループを実行しているので、最初のToDo項目は2回記録され、その後は何も記録されません。アプリケーションが停止せず、エラーもありません。Javascript配列プッシュブレークループ?

export class HelloWorldModel extends Observable { 
    public todos: any[]; 

    constructor() { 
    super(); 
    } 

    Click() { 
    var client = new MobileServiceClient("https://example.azurewebsites.net"); 
    console.log("CLIENT"); 
    var todoItemTable = client.getTable("TodoItem"); 
    console.log("Table"); 
    this.todos = []; 
    todoItemTable.read<TodoItem>().then(function (results) { 
     // results is array of TodoItem-s 
     console.log(results.length); 
     console.log(results[0].text); 
     for (let i of results) { 
     console.log(i.text); 
     //this.todos.push(i.text); 
     } 
    }); 
    } 

} 

何が問題になりますか?このように同じスコープを使用矢印機能、で動作するように

答えて

4

todoItemTable.read<TodoItem>().then((results) => { 
    for (let i of results) { 
    this.todos.push(i.text); 
    } 
}); 

は、私はそれが通じ実行します私のloopに、私はどこでもarray.push()を使用してみました時はいつでも、この同じ問題を抱えていたthe Mozilla Developer Network on Arrow functions

0

を参照してください。一度停止してから停止してください。配列を空の配列としてインスタンス化することでこの問題を解決しました(array: string[ ] = [ ])外の私のloopです。ループの内側の配列にプッシュされる新しい文字列をインスタンス化します。 これが誰でも助けることを願っています=)