簡體   English   中英

javascript es6中鏈接靜態和非靜態方法

[英]Chaining static and non static method in javascript es6

當我鏈接的第一個函數是從同一類返回對象實例的靜態方法時,如何從某個類鏈接多個函數?

靜態方法的目的是用於建立策略模式的工廠方法,並根據哪個提供者處於活動狀態來設置具有不同子類的類的策略屬性。 最后,靜態方法返回基類的實例。

我有一個可行的解決方案,首先調用靜態方法並將對象實例保存在變量引用中。 之后,我要調用其他函數。 我只想通過鏈接將代碼壓縮在一行中。

// Commented code works
// Provider is the base class
// getActiveProvider is the static method and return Provider class object instance
// findNumbersByIds is non static method
// const provider = await Provider.getActiveProvider();
// return await provider.findNumbersByIds([...]);

// This one not working
 return await Provider.getActiveProvider().findNumbersByIds([...]);

我希望通過鏈接獲得正確的結果,就像沒有鏈接一樣。

BR,伊戈爾

TLDR:您缺少括號,因為await的優先級低於.

問題不在於鏈接,而是您濫用了await語法。

這是一個示例,展示了您使用靜態和非靜態方法進行鏈接的方式可以正常工作:

 class X { static create() { console.log('created'); return new X(); } y() { console.log('y'); return this; } } x = X.create().y().y(); 

這是一個示例,顯示了兩種方法都不同步時如何正確執行相同操作:

 class X { static async create() { console.log('created'); return new X(); } async y() { console.log('y'); return this; } } let main = async () => { x = await (await (await X.create()).y()).y(); }; main(); 

對於您的示例,要糾正語法,只需添加一對括號即可:

return (await Provider.getActiveProvider()).findNumbersByIds([...]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM