我正在尝试从this.getDiskName('C:')
取回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
})
...
}
我尝试过这样做,但我一直遇到不同的错误:
def compare(a,b,c):
if a - 3 == 8:
return "I like a!"
elif b == c:
return "I like c!"
else:
return "I like b!"
有人可以解释一下如何正确返回值吗?
答案 0 :(得分:1)
您的问题是,您错过了getDiskName()
或Promise()
即将发出的回调。
由于Promise
方法现在似乎更受欢迎,我会继续这样做以获得这个答案。
使用Promise
方法,您需要函数返回Promise
。在大多数情况下,您只需将所有代码包装在Promise
中并返回:
getDiskName(diskLetter) {
return new Promise((resolve, reject) => {
// rest of your code in the function
});
}
然后,您将调用return
:
resolve()
let diskName = stdout.split('\n')[1];
resolve(diskName)
对于你的错误,你会打电话给拒绝:
if (err) {
reject(err);
}
然后,在使用它的函数中,您必须等待函数中的then()
:
this.getDiskName('C:').then(diskName => console.log(diskName))
回调方法类似,您只需将回调传递到getDiskName
并在准备好后调用它。
答案 1 :(得分:1)
这是处理这种情况的更惯用的方法。我们将函数传递给getDiskName
,它将磁盘名称(返回值)作为参数。
getDisksInfo () {
...
this.getDiskName('C:', function(diskName) {
element['name'] = diskName;
});
// Note that code from here to the end doesn't have access
// to element['name']
...
},
getDiskName (diskLetter, func) {
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]
func(diskName);
})
}
}
现在,这仍然可能对您不起作用,因为您可能在调用后依赖于知道diskName的代码。在这种情况下,您可能会将该代码转换为您的匿名函数。也许getDisksInfo
将函数作为参数来代替。
这是一般模式,你必须确定它最适合你的程序。