Sie sind nicht vor der Lösung der Versprechen warten, bist du es sofort in das Versprechen Executor-Funktion zu tun. Die setTimeout
ist auch tote Code, wegen der return
davor; Wenn die Rückgabe nicht vorhanden wäre, würden Sie timer
einrichten, um sich jedes Mal (nach einer Verzögerung) zu nennen, wenn es ausgeführt wird.
function timer(del) {
return new Promise(function(resolve, reject) {
resolve(del); // <==== You're doing this right away
});
// The following is dead code since you already `return`ed
setTimeout(timer, del); // <==== This would call `timer` later, setting up a repeat
}
Verwenden Sie stattdessen den Timer resolve
aufzurufen:
function timer(del) {
return new Promise(function(resolve, reject) {
setTimeout(resolve, del, del);
});
}
timer(3000).then(function(val) {
console.log('I\'m shown in ' + (val/1000) + ' seconds');
});
Side Hinweis: Diese Zeile
setTimeout(resolve, del, del);
funktioniert mit jedem modernen Browser. Für ältere Browser, die keine Argumente über setTimeout
unterstützt haben vorbei, dann würden Sie entweder tun:
setTimeout(resolve.bind(null, del), del);
oder dieses:
setTimeout(function() {
resolve(del);
}, del);
Ihre 'timer' Funktion gibt den' Promise', bevor Sie 'nennen setTimeout'. – mcuenez