0
私は、次のVue.jsのコンポーネントがあります。Vue.jsと非同期機能コール
module.exports = {
data: function() {
return {
searchText: "",
searchResult: []
}
},
watch:
{
searchText: function() {
this.searchResult = this.search()
}
},
methods:
{
search: function()
{
var result = [];
var _self = this;
$.getJSON("data/data.json", function(json) {
$.each(json, function(index, obj) {
if (_self.searchText.length > 0 && obj.text.indexOf(_self.searchText) != -1)
result.push(obj);
}, this);
});
return result;
}
}
}
このコードはうまく動作しますが、なぜ私は理解していない:
がsearch()
が戻らないのはなぜ非同期関数である$.getJSON()
の結果を待たずに空の配列を返しますか?驚いたことに(私のために)、それはコールバック関数が完了した後に戻るだけです。
@JosephSilberはすでに正しい答えを返しましたが、少し余計に、配列のコピーを作成する 'result.slice()'を返すことができます。このコンテキストではスナップショットになります。あなたはそれが本当に空であることを確認する必要があります:) – cyrix