2017-04-08 2 views
0

Gibt es eine Möglichkeit zur asynchronen Verwendung _.some()? Ich habe das folgende Code-Snippet, das ich versuche, zu einer asynchronen Methode zu wechseln, um zu verhindern, dass es Timeout-Probleme verursacht.Wie asynchron zu verwenden _.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; 
}, 

Die Plattform, für die ich schreibe, verwendet JavaScript ES7, so dass async/await verwendbar ist.

Jedwedes Hilfe ist willkommen,

Scott

+1

Asynchroner Code wird Ihnen hier nicht helfen, weil Ihre 'DLClear' -Funktion (und' _.some') nicht IO-gebunden sind, sondern eine "busy" -Funktion. Wenn der Code in Ihrer Umgebung zu lange dauert, schlägt er vor, dass Sie einen ineffizienten Algorithmus verwenden. Was macht Ihre "segmentIntersection" -Funktion? Wie groß ist das Array "wallSegments"? – Dai

+0

Dies ist für ein Skript für eine virtuelle Tischplatte (VTT) Gaming-Plattform. segmentIntersection bestimmt, ob die Segmente, die an es übergeben werden, sich an irgendeinem Punkt schneiden. Die Größe des wallSegments-Arrays ist nicht festgelegt. Es hängt davon ab, wie viele Wandsegmente der Benutzer auf dem VTT erstellt hat, also könnte es 1 Eintrag sein oder könnte ein paar Hundert oder Tausend sein und (ok tausende wahrscheinlich hyperbole). Ich weiß, dass _.some() nicht das ist, was ich benutze, aber gibt es eine Möglichkeit, dass ich es mit etwas wie _.defer() verwenden könnte, um von dem Call-Stack zu warten, bevor er ausgeführt wird? –

Antwort

0

Sie können die async Bibliothek verwenden, die für die Verwendung mit Node.js und für diesen Fall .each Funktion Ihnen helfen konzipiert.

+0

Leider ist diese Bibliothek auf der Plattform nicht verfügbar und ich kann keine zusätzlichen Bibliotheken installieren. –

+0

@ScottCasey Welche Plattform? Wenn Sie spezifische Anforderungen haben, ist es wahrscheinlich am besten, spezifische Informationen bereitzustellen, z. B. kann die Plattform eine Art Service-Arbeiter oder Spawning bereitstellen, wenn das Problem darin besteht, dass Sie eine Benutzeroberfläche nicht blockieren möchten. –

+0

@DaveNewton Die Plattform ist die Roll20 API –

Verwandte Themen