※ 引述《asleepme (500年沒換暱稱了)》之銘言:
: 請教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來處理
: 感覺看起來很不直覺,不知道有更好的辦法嗎?
: 感謝~
第二個問題
覺得這樣還算直覺
let delay = (i) => new Promise(r => { setTimeout(r, i) })
async whatever() {
todo1()
delay(1000)
todo2()
delay(5566)
}
第一個問題
methods: {
inline(actions) {
for(let action of actions) {
this[action]()
}
}
execute(todos) {
this.inline(todos)
}
}
要這樣玩的話最好是用TS,JS容易炸掉