setTimeout函数完成时调用Promise



我正在尝试在代码中实现Promise语句,希望得到一些帮助。我有一个用setTimeout运行的函数。我想在函数完成后调用它。

尝试过包含Promise语句,但我觉得我做得不对。任何反馈都有助于

function App(){
let exampleProm = new Promise(
function(){
type.type("hello , dexter", 100);
}
).then(console.log('finished'));
}
App();

//被称为第一个的代码

module.exports = {
type: function(phrase, delaySpeed){
let total = 0;
let empty = [];
for(let i = 0; i < phrase.length;i++){
total += delaySpeed;
setTimeout(() => {
empty.push(phrase.charAt(i));
process.stdout.write(chalk.blue.bold(empty[i]));
if(empty.length === phrase.length){ //if complete
process.stdout.write('n'); //puts on separate line
}
},total);
}
}
}

使用一个promise数组,每个promise在setTimeout()Promise.all()中解析((,以便在它们都解析后运行代码

module.exports = {
type: function(phrase, delaySpeed) {
let total = 0;
let empty = [];
let promises = []
for (let i = 0; i < phrase.length; i++) {
total += delaySpeed;
// new promise for each character
let promise = new Promise(function(resolve, reject) {
setTimeout(() => {
empty.push(phrase.charAt(i));
process.stdout.write(chalk.blue.bold(empty[i]));
if (empty.length === phrase.length) { //if complete
process.stdout.write('n'); //puts on separate line
}          
// assuming above writes are synchronous can now resolve promise
resolve()
}, total);
});
// push new promise to array
promises.push(promise)
}
// return the all() promise
return Promise.all(promises)// add another then() if you need to return something to next then() in App()
}
}
function App(){    
type.type("hello , dexter", 100).then(function(){
// this then() fires when the Promise.all() resolves
console.log('finished')
});    
}

您的.then处理程序从未被调用的原因是promise停留在其初始状态,即"挂起"。

承诺可以是待决的或已结清的(已履行/已拒绝(。传递给Promise构造函数的回调包含两个参数,resolve(触发履行(和reject(触发拒绝(。

var promise1 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 300);
});
promise1.then(function(value) {
console.log(value);
// expected output: "foo"
});

在Promise API的MDN文档中查看上面代码的来源。

我认为上面的例子给了你一个如何实现基于承诺的延迟的提示,但如果你需要进一步的帮助,请告诉我。

最新更新