首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS -在setTimeout完成后运行函数

NodeJS -在setTimeout完成后运行函数
EN

Stack Overflow用户
提问于 2018-11-19 12:42:21
回答 1查看 154关注 0票数 0

在一个项目中,我调用了多个具有setTimeout特性的函数。在下面的代码中,我似乎不能让我的代码按顺序运行。例如,调用一个函数,然后调用下一个函数,然后调用下一个函数。每一个都在等待另一个完成。

请随意更改我的代码,因为我很想了解更多关于这个问题的信息。

**更新

由于很难解释我的问题,我想我只需要发布完整的代码即可。在问候页面中,我使用inquirerJS提示用户一个问题。当我询问用户时,我的第三个函数就会触发,而不需要等待承诺来解决。

代码语言:javascript
复制
TYPE PAGE

module.exports = {
  writer: 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()
  }
}

GREET PAGE


const inquirer = require('inquirer');
let intro = require('./type.js');
let chalk = require('chalk');
let type = require('./type.js');

let greet = function(){
    let questions = [{
        type: 'input',
        name: 'firstName',
        message: 'what your name',
    }];

    inquirer
        .prompt(questions)
        .then(answers => {
            setTimeout(function(){
                type.writer(`Hello ${answers.firstName}`,100);
            },500);
        }
    )
}
module.exports = greet;

MAIN APP PAGE

let initialGreeting = require('./user.js');



function App(){
    function second(){
        return new Promise(function(resolve,reject){
            setTimeout(function a(){
                initialGreeting();
                 resolve();
             }, 200);
        }
    )
function third(){
    console.log('finished')
}
    type.writer('abc',100).then(second).then(third);

};

App();

EN

回答 1

Stack Overflow用户

发布于 2018-11-19 14:02:30

退还你新的承诺:

代码语言:javascript
复制
let greet = function(){
    let questions = [{
        type: 'input',
        name: 'firstName',
        message: 'what your name',
    }];
    inquirer
        .prompt(questions)
        .then(answers => {
            return new Promise(function(resolve,reject) {
                setTimeout(function(){
                    type.writer(`Hello ${answers.firstName}`,100);
                    resolve();
                },500);
            }).then(function(){
                console.log("run after")
            });

        }
    )
}
module.exports = greet;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53368420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档