2013-11-04 45 views
0

我一直在開發一個應用程序,允許多人同時修改數據並實時自動傳播更改。在這樣做的過程中,出現了一些關於$ watch性質的問題。角度實時應用程序開發

其中之一是:

如果被監視的數據模型的變化,而手錶通話過程中會發生什麼?

從一些實驗結果我相信,手錶再次被召喚在同一時間。我相信一些無限的摘要循環是由此造成的。

而另一個值得關注的問題不是關於手錶是:

什麼是阻止客戶端等待承諾要執行的最佳方法?

在Angular RT Web開發上的任何資源都會很棒!

回答

1

對於您的第一個問題,我建議您閱讀developer guide中的Angular運行時概念。基本上,由於多個$watchers都可以對其進行修改,因此數據可能會發生變化,因爲$digest階段正在進行。這裏的問題是角度期望模型在10次迭代中穩定下來,否則它會拋出Maximum iteration limit exceeded.錯誤,但是您可以增加此限制。

現在第二個問題是有點矛盾 - 承諾的整個點是而不是阻止客戶端,而某些異步執行。通常你會做異步操作,獲得承諾並掛接異步操作完成後執行的回調。

+0

我知道第二個問題似乎很奇怪。這個問題來自在$ watch調用中產生promise的行爲(因爲我需要與Firebase進行異步對話)。我擔心,當第一個$ watch調用發生時,Firebase查詢將異步啓動,當發生第二個查詢時,所有查詢都將錯誤地修改我的共享數據結構。我的想法是,我不會阻止查詢服務器,但會阻止接收數據。那有意義嗎? –

+1

是的,但如果沒有黑客Angular的核心接受承諾作爲'$ watcher's'返回值並等待它完成,那麼這是不可能的。這將是非常非常低效的。你最好的選擇是建立一個服務,將這些異步調用壓縮成離散的(比如20ms)間隔,然後用最新的數據更新模型。總之,角度不是這種交互的最佳選擇,恕我直言。 – package

+0

感謝您的幫助。編寫需要如此高度併發性的應用程序,您會選擇什麼? –

0

你看過Firebase和Angular fire嗎? http://angularfire.com/

我很新的這一點,但它似乎是實時的最佳選擇應用程式大氣壓。

+0

我正在使用它。這個問題與標準化的數據庫模式有關。 –