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
global.name
=max
num 2
num 3
console.log(global.name)
max
而不是undefined
我需要像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)
printmax
而不是undefined
你需要使用promise你需要使用promise和/或callback函数我知道这一点,为了理解我的意思,请随意查看我在上下文``Discovery\u context:global.Discovery\u context``中设置的这个文件。当我第一次运行这个代码时,我得到了全局的。Discovery\u context是未定义的,所以如果你试图在updateMessage函数之外打印它,你会得到未定义的文件。我知道这一点,为了理解我的意思,请随意查看我在上下文“发现上下文:全局。发现上下文”中设置的这个文件。当我第一次运行此代码时,我得到了global。发现上下文是未定义的,因此如果您试图在updateMessage
函数之外打印它,您将无法定义它我能把这个给你吗?