我正在尝试从脚本中的另一个函数引用getJSONS函数,但似乎无法这样做。
我收到的错误是(node:5857) UnhandledPromiseRejectionWarning: TypeError: this.getJSONS is not a function
,我该如何解决?
module.exports = {
getJSONS(bucket, storageDir, folderNameLength) {
return new Promise((resolve, reject) => {
resolve(`filesss`)
})
},
setJSONSMetadata(bucket, storageOptions) {
return new Promise((resolve) => {
this.getJSONS(bucket, storageOptions, storageOptions.prefix.length).then((jsonFiles) => {
// do something
});
resolve(true)
})
},
}
答案 0 :(得分:1)
关键字this
指向作用域中的函数(在您的情况下,匿名函数传递给new Promise
),而不指向导出的对象。
一种解决方法可能是在创建诺言之前将this
的值存储到变量中。然后调用变量而不是this
。一种常见的做法是使用单词self
。看起来可能像这样:
module.exports = {
getJSONS(bucket, storageDir, folderNameLength) {
return new Promise((resolve, reject) => {
resolve(`filesss`)
})
},
setJSONSMetadata(bucket, storageOptions) {
const self = this; // store the value of `this` from the higher scope
return new Promise((resolve) => {
// `this` inside here is different
self.getJSONS(bucket, storageOptions, storageOptions.prefix.length).then((jsonFiles) => {
// do something
});
resolve(true)
})
},
}
答案 1 :(得分:0)
Parker的解决方案无效,我最终复制了setJSONSMetadata函数并将其复制到getJSONS函数中。很奇怪,我知道。