0

azure nodejs SDK 是否有可用的 wait() 函数,就像 python SDK 一样。下面是我在 azure 中启动 VM 的 python 代码

async_vm_start = compute_client.virtual_machines.start(group_name, vm_name)
async_vm_start.wait()

所以在这里我的整个程序一直等到VM完全启动并继续。下面是我的 nodejs 代码来启动一个虚拟机

clientCompute.virtualMachines.start(resourceGroupName, vmName, function(err, result) {
    if (err) console.log(err);
    else console.log(result);
})

在这里,我的程序无需等待,而是继续进行,即使在幕后 VM 仍处于启动过程中。

我试过 setTimeout 但它不可靠。那么有什么方法可以让我的 nodejs 函数等到 VM 完全启动。

提前致谢

4

1 回答 1

2

start()函数的第三个参数是一个回调函数,它将在 VM 启动后调用。如果您有以下代码:

console.log('I will be logged first!')
clientCompute.virtualMachines.start(resourceGroupName, vmName, function(err, result) {
    console.log('I will be logged after the VM has started!')
})
console.log('I will be logged almost immediately after the first!')

你会看到他们运行的顺序。如果在 VM 启动有任何事情需要发生,请在该回调中执行。

当然,如果您有很多事情要做,并且在回调内部有回调内部的回调,这可能会很痛苦......它只会变得混乱。我不确定您使用的是什么版本的 SDK,但是对于较新的 SDK,您可以使用 async/await:

console.log('I will be logged first!')
await clientCompute.virtualMachines.start(resourceGroupName, vmName)
console.log('I will be logged after the VM has started!')

或使用 promisify 将基于回调的函数转换为可以等待的 Promise。

于 2021-08-13T21:50:30.787 回答