2017-04-08 69 views
0

有沒有辦法異步使用_.some()?我有下面的代碼片段,我試圖切換到異步方法,以防止它造成超時問題。如何異步使用_.some

DLClear = function(obj, squarePt) { 

    var wallPaths = findObjs({ 
     _type : 'path', 
     _pageid: obj.get('pageid'), 
     layer : 'walls' 
    }); 

    var landingPt = [ obj.get('left'), obj.get('top'), 1 ]; 
    var wallSegments = PathMath.toSegments(wallPaths); 
    var squareSeg = [ landingPt, squarePt ]; 

    var blocked = _.some(wallSegments, function(wallSeg) { 
     return PathMath.segmentIntersection(squareSeg, wallSeg); 
    }); 
    return !blocked; 
}, 

我寫的平臺是使用javascript ES7,因此async/await可用。

任何和所有幫助表示讚賞,

斯科特

+1

異步代碼在這裏不會幫助你,因爲你的'DLClear'函數(和'_.some')不是IO綁定的,而是一個「忙碌」函數。如果您的代碼在您的環境中執行時間過長,則表示您使用的算法效率低下。你的'segmentIntersection'函數做什麼? 'wallSegments'數組有多大? – Dai

+0

這是針對虛擬桌面(VTT)遊戲平臺的腳本。 segmentIntersection確定傳遞給它的片段是否在任何點相交。 wallSegments數組的大小不固定。這取決於用戶在VTT上創建了多少個牆段,因此可能是1個條目,或者可能是幾百或幾百個,並且(好的千個可能是誇張的)。我知道_.some()並不是我將要使用的,但是有沒有一種方法可以將它切換爲使用諸如_.defer()之類的方法等待調用堆棧在運行之前完成? –

回答

0

可以使用async庫,設計用於Node.js的使用,對於這種情況。每個功能會幫助你。

+0

不幸的是,該庫在平臺上不可用,我無法安裝其他庫。 –

+0

@ScottCasey什麼平臺?如果您有特定要求,最好提供具體信息,例如,如果問題是您不想阻止用戶界面,平臺可能會提供某種形式的服務人員或產卵。 –

+0

@DaveNewton平臺是Roll20 API –