gpt4 book ai didi

javascript - 如何从该异步函数获取结果?

转载 作者:行者123 更新时间:2023-12-01 02:01:05 26 4
gpt4 key购买 nike

问题

我正在尝试从 this.getDiskName('C:') 获取 diskName 并将其分配给element['name']:

getDisksInfo () { 
...
element['name'] = this.getDiskName('C:')
...
},

getDiskName (diskLetter) {
if (process.platform == 'win32') {
var exec = require('child_process').exec
var cmd = `wmic logicaldisk where caption="${diskLetter}" get VolumeName`

exec(cmd, (err, stdout, stderr) => {
if (err) {
console.log(err)
}
let diskName = stdout.split('\n')[1]
return diskName
})
}
}

我尝试这样做,但我不断收到不同的错误:

getDiskName (diskLetter, callback) {
...
exec(cmd, (err, stdout, stderr) => {
if callback(null, () => {
let diskName = stdout.split('\n')[1]
return diskName
})
...
}

问题

有人可以解释一下如何正确返回该值吗?

最佳答案

您的问题是您缺少传入 getDiskName() 的回调或传出的 Promise()

由于 Promise 方法现在似乎更流行,因此我将采用这种方法来回答。

使用 Promise 方法,您需要函数返回 Promise。在大多数情况下,您只需将所有代码包装在 Promise 中并返回:

getDiskName(diskLetter) {
return new Promise((resolve, reject) => {
// rest of your code in the function
});
}

然后,您将调用 resolve(),而不是 return:

let diskName = stdout.split('\n')[1];
resolve(diskName)

对于您的错误,您将调用拒绝:

if (err) {
reject(err);
}

然后,在使用它的函数中,您必须等待函数中的 then():

this.getDiskName('C:').then(diskName => console.log(diskName))

回调方法类似,只需将回调传入 getDiskName 并在准备好时调用它即可。

关于javascript - 如何从该异步函数获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50584235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com