我需要创建一个函数'timer',它返回一个promise并接受一个参数(毫秒数)。承诺应该在争论时间进入国家“履行”。它不会延迟新的Promise。
function timer(del) {
return new Promise( function (resolve, reject) {
resolve(del);
});
setTimeout(timer, del);
};
timer(3000).then(function(val) {
console.log ('I\'m shown in ' + (val / 1000) + ' seconds');
});
答案 0 :(得分:2)
在解决承诺之前你没有等待,你正在诺言执行函数中做到这一点。 setTimeout
也是死代码,因为前面有return
;如果没有返回,那么每次运行时你都会设置timer
来自行调用(延迟后)。
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
}
相反,请使用计时器调用resolve
:
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');
});
旁注:此行
setTimeout(resolve, del, del);
适用于任何现代浏览器。对于不支持通过setTimeout
传递参数的旧版浏览器,您可以执行以下操作:
setTimeout(resolve.bind(null, del), del);
或者这个:
setTimeout(function() {
resolve(del);
}, del);
答案 1 :(得分:0)
function timer(del) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, del)
});
}