2017-08-15 191 views
0

我有一個角度4應用程序,我試圖寫一個行動的隊列。上一個功能完成後,每個動作都將被觸發並獲取其參數。Angular - 如何使用帶參數的箭頭函數?

public activeRegistrationAndSync() { 
 
    let actionsToPerformByOrder = [ 
 
     () => this.registrationComponent.activeFormValidators.apply(null, arguments), 
 
     () => this.registrationComponent.register.apply(null, arguments), 
 
     () => this.autoLogin.apply(null, arguments), 
 
     () => this.postLogin.apply(null, arguments), 
 
     () => this.checkout.apply(null, arguments) 
 
    ]; 
 

 
    let defer = new Deferred<void>(); 
 
    let curPromise = defer.promise; 
 

 
    //Build chain of acitons 
 
    actionsToPerformByOrder.forEach(action => { 
 
     curPromise = curPromise 
 
     .then(action) 
 
     .catch(err => this.error.emit(err)); 
 
    }) 
 

 
    //Active actions 
 
    defer.resolve(); 
 
} 
 
    
 
    
 
export class Deferred<T> { 
 
    promise: Promise<T>; 
 
    resolve: (value?: T | PromiseLike<T>) => void; 
 
    reject: (reason?: any) => void; 
 

 
    constructor() { 
 
    this.promise = new Promise<T>((resolve, reject) => { 
 
     this.resolve = resolve; 
 
     this.reject = reject; 
 
    }); 
 
    } 
 
}

我的問題是箭頭功能,不支持參數和使用功能(){}而不是改變此引用。

+1

「不支持參數」? '(arg1,arg2)=> this.doSomethingWith(arg1,arg2)' – Arg0n

+2

。''相反,你可以在之前定義'let that = this;',而在'functions'中使用'that'。 –

+0

如果您確實需要使用'function(){..'(參數)=> {...}' – Arg0n

回答

1

我建議你用async/await來組合和運行你的動作。這很容易閱讀,這裏是基本的想法,修改它與您的具體情況:

async function activeRegistrationASync() { 
    const actionsToPerformByOrder = [ 
    async (r) => { 
     return Promise.resolve(3) 
    }, 
    async (r) => { 
     return Promise.resolve(r + 5) 
    } 
    ]; 

    let result; 
    for (let action of actionsToPerformByOrder) { 
    result = await action(result); 
    } 
    return result; 
} 

activeRegistrationASync().then((r) => { 
    console.log(r); 
}); 
+0

我可以將一個函數的結果鏈接爲下一個函數的參數,而無需知道每個函數應該接收哪些內容? 我知道它可以使用apply(null,arguments)來完成,但參數不適用於箭頭函數。我想編寫一個類來構建一個可執行函數的隊列,每個函數的結果將作爲參數提供給下一個函數。 –

+0

但這正是我正在做的,我將一個函數的結果傳遞給下一個函數。 _不需要知道每個功能應該接收什麼_你在這裏意味着什麼? –

+0

@ user3554268,你解決了你的問題嗎? –

0
  1. 您可以使用傳播運營商像

    (...休息)=>執行console.log(休息)

  2. 可以使用bind功能

    函數func(/ 參數 /){console.log(this。arguments)}

    let a = func.bind(this)

相關問題