Warum ist mein Versprechen der Rückgabe undefiniert?

Hintergrund

Ich versuche, eine Funktion, die verzögert die Ausführung von asynchronen Funktionen von X ms.

Für die Zwecke dieser demonstration, die folgende ist die async-Funktion, die nimmt eine URL:

/*
 *  This is a simulation of an async function. Be imaginative! 
 */
let asyncMock = function(url) {
    return new Promise(fulfil => {

        setTimeout(() => {
            fulfil({
                url,
                data: "banana"
            });
        }, 10000);

    });
};

Ziel

Mein Ziel ist dabei eine Funktion, die die url argument asyncMock und dann rufen Sie alle X ms, oder bis es keine Argumente mehr, die linke.

Grundsätzlich möchte ich jeden Aufruf von asyncMock getrennt werden von X ms.

Stellen Sie sich als Beispiel nenne ich asyncMock 20 mal in Folge. Normalerweise werden diese 20 Anrufe würden sofort erledigt werden. Was ich will, um sicherzustellen, dass es ist Xms Verzögerung zwischen jedem der 20 Anrufe.

Vorläufige

Meine Idee um dies zu lösen, ist eine Fabrik haben, zurückgeben, ein Versprechen, führen Sie die Funktion nach X ms.

let throttleFactory = function(args) {

    let {
        throttleMs
    } = args;

    let promise = Promise.resolve();

    let throttleAsync = function(url) {

        return promise.then(() => {

            setTimeout(anUrl => {
                return new Promise( fulfil => {
                    fulfil(asyncMock(anUrl));
                });
            }, throttleMs, url);
        });
    };

    return Object.freeze({
        throttleAsync
    });
};

Ideal ich würde dieses Werk wie im Beispiel unten:

let throttleFuns = throttleFactory({
    throttleMs: 2000
});

console.log('running');

throttleFuns.throttleAsync('http://www.bananas.pt')
    .then(console.log)
    .catch(console.error);

throttleFuns.throttleAsync('http://www.fruits.es')
    .then(console.log)
    .catch(console.error);

throttleFuns.throttleAsync('http://www.veggies.com')
    .then(console.log)
    .catch(console.error);
//a ton of other calls in random places in code

Problem

Hier das problem, dass mein throttleAsync Funktion Ausgänge undefined dreimal sofort. Ich glaube, das könnte sein, weil ich bin nicht der Definition promise richtig.

Frage

Wie kann ich das beheben dieser code funktioniert wie gedacht?

Abgesehen von dem Versprechen Probleme, ich sehe nicht, wie das drosseln nichts. Es verzögert die Dinge, aber er drosselt nicht.
Ok, also vielleicht sollte ich die Beschreibung ändern? Ich bin auf es.
Aktualisiert die Beschreibung, danke für das feedback!

InformationsquelleAutor Flame_Phoenix | 2017-03-03

Schreibe einen Kommentar