Javascript Node js在完成多行代码之前执行函数

Javascript Node js在完成多行代码之前执行函数,javascript,node.js,chatbot,watson-assistant,watson-discovery,Javascript,Node.js,Chatbot,Watson Assistant,Watson Discovery,此功能: 函数打印(){ console.log('num 1') 设置超时(()=>{ global.name='max' console.log('num 2') },9000); console.log('num3'); } 打印(); console.log(global.name) priting是这样的: num 1 num 3 undefined num 2 我需要: 打印num 1 等9秒钟 设置global.name=max 打印num 2 打印num 3 console.

此功能:

函数打印(){
console.log('num 1')
设置超时(()=>{
global.name='max'
console.log('num 2')
},9000);
console.log('num3');
}
打印();
console.log(global.name)
priting是这样的:

num 1
num 3
undefined
num 2
我需要:

  • 打印
    num 1
  • 等9秒钟
  • 设置
    global.name
    =
    max
  • 打印
    num 2
  • 打印
    num 3
  • console.log(global.name)
  • 打印
    max
    而不是
    undefined
  • 我用python编写了这段代码,并逐行执行 因为没有所谓的同步和异步


    我需要像python一样执行此代码(逐行)

    Javascript代码逐行执行。如果要执行代码片段,仍然需要将给定的行放入超时,如下所示:

    let name = "Unknown";
    
    function print() {
        console.log('num 1');
    
        setTimeout(() => {
            this.name = 'max';
            console.log('num 2');
            console.log('num 3');
            console.log(this.name);
    
        }, 900);
    
    
    }
    
    print();
    

    在JavaScript中处理同步性最可读的方法是使用异步函数。让您了解它的外观:

    // To simulate the function you're going to use the snippet in
    (async () => {
    
      async function print(){
        console.log('num 1')
    
        // await stops the execution until the setTimeout in sleep is done (non blocking)
        await sleep(9000);
    
        global.name = 'max'
        console.log('num 2')
    
        console.log('num 3');
      }
    
      // wait for the print function to finish
      await print();
    
      console.log(global.name)
    
    })();
    
    // Little utility function
    function sleep(time) {
      return new Promise(resolve => setTimeout(resolve, time))
    }
    

    您可以在此处阅读有关async/Wait的更多信息:

    代码正在逐行执行。
    setTimeout()
    API安排在将来某个时间调用函数,但是
    setTimeout()
    本身会立即返回。好吧,如果我需要它打印
    num 1
    ,让它等待9秒,然后设置
    全局。name
    =然后打印
    num 2
    ,该怎么办,
    num 3
    然后通过
    console.log(global.name)
    print
    max
    而不是
    undefined
    你需要使用promise你需要使用promise和/或callback函数我知道这一点,为了理解我的意思,请随意查看我在上下文``Discovery\u context:global.Discovery\u context``中设置的这个文件。当我第一次运行这个代码时,我得到了全局的。Discovery\u context是未定义的,所以如果你试图在updateMessage函数之外打印它,你会得到未定义的文件。我知道这一点,为了理解我的意思,请随意查看我在上下文“发现上下文:全局。发现上下文”中设置的这个文件。当我第一次运行此代码时,我得到了
    global。发现上下文是未定义的,因此如果您试图在
    updateMessage
    函数之外打印它,您将无法定义它我能把这个给你吗?