JavaScript - 在回调中设置对象 属性
JavaScript - Set object property in callback
我非常有信心 this
我做错了什么。以前有人问过这个问题,但即使看了其他问题和答案,我仍然无法解决问题。
基本上,问题是我无法将 file.fileType
设置为我需要的值,它来自 magic.detectFileType
.
中的回调函数
var Magic = mmm.Magic,
magic = new Magic(mmm.MAGIC_MIME_TYPE),
for (var i in files){
var file = new File(files[i])
file.detectFileType();
commandSelf.log("File Type: " + file.fileType);
commandSelf.log("File Name: " + file.filename);
commandSelf.log("Full Path: " + file.fullPath);
}
var File = function(filename){
this.filename = filename;
this.fullPath = null;
this.fileType = null;
};
File.prototype.detectFileType = function(){
this.fullPath = path + "/" + this.filename;
var self = this;
// Make sure this is an appropriate image file type
magic.detectFile(this.fullPath, function(err, result){
self.fileType = "test"
});
}
更合适的解决方案是让 detectFileType
接受回调或 return Promise,以便您知道异步任务何时完成并且您可以安全地检查 File
实例属性。例如:
var Magic = mmm.Magic;
var magic = new Magic(mmm.MAGIC_MIME_TYPE);
files.forEach(function(file) {
file = new File(file);
file.detectFileType(function(err) {
if (err) throw err;
commandSelf.log("File Type: " + file.fileType);
commandSelf.log("File Name: " + file.filename);
commandSelf.log("Full Path: " + file.fullPath);
});
});
var File = function(filename){
this.filename = filename;
this.fullPath = null;
this.fileType = null;
};
File.prototype.detectFileType = function(cb){
this.fullPath = path + "/" + this.filename;
var self = this;
// Make sure this is an appropriate image file type
magic.detectFile(this.fullPath, function(err, result){
self.fileType = "test"
cb(err);
});
}
我非常有信心 this
我做错了什么。以前有人问过这个问题,但即使看了其他问题和答案,我仍然无法解决问题。
基本上,问题是我无法将 file.fileType
设置为我需要的值,它来自 magic.detectFileType
.
var Magic = mmm.Magic,
magic = new Magic(mmm.MAGIC_MIME_TYPE),
for (var i in files){
var file = new File(files[i])
file.detectFileType();
commandSelf.log("File Type: " + file.fileType);
commandSelf.log("File Name: " + file.filename);
commandSelf.log("Full Path: " + file.fullPath);
}
var File = function(filename){
this.filename = filename;
this.fullPath = null;
this.fileType = null;
};
File.prototype.detectFileType = function(){
this.fullPath = path + "/" + this.filename;
var self = this;
// Make sure this is an appropriate image file type
magic.detectFile(this.fullPath, function(err, result){
self.fileType = "test"
});
}
更合适的解决方案是让 detectFileType
接受回调或 return Promise,以便您知道异步任务何时完成并且您可以安全地检查 File
实例属性。例如:
var Magic = mmm.Magic;
var magic = new Magic(mmm.MAGIC_MIME_TYPE);
files.forEach(function(file) {
file = new File(file);
file.detectFileType(function(err) {
if (err) throw err;
commandSelf.log("File Type: " + file.fileType);
commandSelf.log("File Name: " + file.filename);
commandSelf.log("Full Path: " + file.fullPath);
});
});
var File = function(filename){
this.filename = filename;
this.fullPath = null;
this.fileType = null;
};
File.prototype.detectFileType = function(cb){
this.fullPath = path + "/" + this.filename;
var self = this;
// Make sure this is an appropriate image file type
magic.detectFile(this.fullPath, function(err, result){
self.fileType = "test"
cb(err);
});
}