[請益] vue js用變數呼叫function

作者: asleepme (500年沒換暱稱了)   2018-12-11 15:51:05
請教js大大們,有個應用是要依序執行3個動作 action1, aciton2, action3
每個動作間會有delay, delay1, delay2, delay3
action的順序是讓user可以設定的ex: action1,2,3 or action3,1,2
這樣我是不是可以把user設定好的順序存成一個array叫actions好了
然後value剛好就是依序要執行的action的function name
actions = [ 'action3', 'action2', 'action1'];
然後像這樣用 actions[0]();
但是每個action是寫在vue的methods裡面,所以實際上要執行action會像這樣
this.action1();
如果想用變數的方式處理,就會變成
currentAction = actions[0];
this.currentAction()
顯然這樣是不可行的
有什麼辦法可以處理這個問題呢?
另外每個動作間的delay我是用setTimeout來處理
感覺看起來很不直覺,不知道有更好的辦法嗎?
感謝~
作者: DCTmaybe (竹竹人)   2018-12-11 16:03:00
所以你的問題是:如何依照用戶自訂的順序去執行功能嗎?
作者: a510042003 (寶咖咖啡)   2018-12-11 16:04:00
不對 你 action array裡面用的是字串應該要 action [ this.action1, this.action2, this.action3 ]然後記得 settimeout不是非同步function
作者: Phenomenon (Kuma)   2018-12-11 20:09:00
this[action[0]]()
作者: TitanEric (泰坦)   2018-12-11 22:34:00
樓上厲害
作者: DCTmaybe (竹竹人)   2018-12-12 00:44:00
this可以這樣包methods function!?(大驚!?
作者: fukinhot (抱歉粗口我怕熱)   2018-12-12 08:57:00
就取thos prop然後執行啊*this
作者: max241 (養生之道)   2018-12-12 12:26:00
user設定method array 走訪array去執行method 依序等待
作者: hstt   2018-12-12 13:37:00
感覺你需要像 redux-saga之類的套件
作者: truthmanman (rain)   2018-12-23 14:16:00
rxjs ,保證處理的省力很多

Links booklink

Contact Us: admin [ a t ] ucptt.com