如何添加2个打开的功能但延迟一个?

时间:2019-06-10 07:30:16

标签: javascript

我需要制作一个使用功能工具盖章狗然后延迟它来盖章的应用程序。您能否使用功能工具为两个对象加盖印章(不能同时)为我提供帮助?谢谢。

我尝试使用...

function open2() {
  // code here
}

而且我也尝试使用...

function open() {
  // code here
}

两个人

function open(){
  stamp ('dog14',600,850,200)
  sound ('dog')

  sound('old man')
  stamp('old man',300,700)
}

当我使用该代码时,狗和老人被同时盖章,但是我需要在狗之后3秒给老人盖章。

2 个答案:

答案 0 :(得分:2)

这看起来像是一个作业问题,所以我会提示您一个很好的答案。要引入延迟,可以使用setTimeout或将一个代码包装在promise中。

超时示例:

function stamp (x) {
  console.log("Stamped " + x)
}

function sound (x) {
  console.log("Sounded " + x)
}

function open() {
  stamp ('dog14',600,850,200)
  sound ('dog')

  setTimeout(function () {
    sound('old man')
    stamp('old man',300,700)
  }, 3000) // executes after 3,000 milliseconds
}

open()

您可能还想使用一个承诺。此处的区别是,promise将确保您的事件按顺序执行。如果您使用了超时,则无论第一部分是否运行(为狗加盖时间戳),代码的第二位(给老​​人盖章)都会发生。一个承诺将确保狗首先发生,然后是老人。

您可以通过多种方法来执行此操作。这是您可能想探索的一种。

function stampAndSoundDog () {
  return new Promise(function(resolve, reject) {
    // stamp and sound dog here
    // then call resolve after a 3s timeout
  })
}

function open {
  stampAndSoundDog.then(function() {
    // stamp and sound the old man here
  })
}

答案 1 :(得分:0)

您可以定义一个函数并包括一个超时。包括 Promises 是管理异步操作的一种更简单的选择。以下是四个 功能:

  1. 邮票(图)
  2. 声音(图)
  3. stampAndSound(图)
    • 返回异步操作
      • 如果figure为空或未定义,则承诺将被拒绝catch方法可以捕获并记录返回的内容。在这种情况下,将返回'Nothing to stamp and sound'
      • 否则stampsound被调用,诺言解决
  4. open()

function stamp(figure){
  console.log(figure + ' stamped');
}

function sound(figure){
  console.log(figure + ' sounded');
}

function stampAndSound(figure) {
  return new Promise(function(resolve, reject) {
    // if empty argument is given, reject promise
    if(figure === undefined || figure == ''){ 
      reject('Nothing to stamp and sound');
    }else{
      // otherwise stamp and sound 
      stamp(figure);
      sound(figure);
      resolve();
    }
  })
}

// define variables ...
let oldMan = 'old man';
//let dog = '';  // uncomment this line and comment the one below to test how the promise rejects
let dog = 'pitbull';

function open(){
  // stampAndSound oldMan first then dog
  stampAndSound(oldMan).then(function() {
    // wait three seconds then stamp and sound dog
    setTimeout(function(){
      stampAndSound(dog).catch(function(error){ // if promise gets rejected.. 
        console.log('Error: ' + error);
      });
    }, 3000) 
  }).catch(function(error){ // if promise gets rejected.. 
    console.log('Error: ' + error);
  })
}

open();

ES6语法

const stamp = (figure) => {  console.log(`${figure} stamped`); }

const sound = (figure) => { console.log(`${figure} sounded`); }

const stampAndSound = (figure) => {
  return new Promise((resolve, reject) => {
    if(figure === undefined || figure == ''){ 
      reject('Nothing to stamp and sound');
    }else{
      stamp(figure);
      sound(figure);
      resolve();
    }
  })
}

// define variables ...
let oldMan = 'old man';
let dog = 'pitbull';

const open = () => {
  stampAndSound(oldMan).then(() => {
    setTimeout(() => {
      stampAndSound(dog).catch((error) => {
        console.log('Error: ' + error);
      });
    }, 3000); 
  }).catch((error) => { 
    console.log('Error: ' + error);
  })
}

open();