我收到一个奇怪的错误,无法弄清楚我做错了什么。我写了一个graphql变异来调用api:
domainStuff: async (parent, { command, params }, { models }) => {
console.log("Params:", params);
const result = await dd24Api(command, params);
return result;
}
这就是我所说的功能:
export default async (command, parameter) => {
const args = _.merge({ params: parameter }, auth);
// Eleminate copying mistakes
console.log(typeof args);
const properCommand = command + "Async";
const result = await soap
.createClientAsync(apiWSDL)
.then(client => {
return client[properCommand](args)
.then(res => {
console.log(res[command + "Result"]);
return res[command + "Result"];
})
.catch(err => {
console.log(err);
return err;
});
})
.catch(err => console.log(err));
return result;
使用此查询变量:
{
"command": "CheckDomain",
"params": {"domain": "test.it"}
}
console.log告诉我args是一个对象,但我得到了这个错误(来自第一个catch块):
TypeError: obj.hasOwnProperty is not a function
怎么会这样?毕竟我检查它是否是一个对象,它是。更奇怪的是,如果我将一个硬编码对象放入查询中,例如:
domainStuff: async (parent, { command, params }, { models }) => {
console.log("Params:", params);
const result = await dd24Api(command, {domain: "test.com"});
return result;
}
然后它完美无缺。我究竟做错了什么?请提前获得任何帮助。
编辑:我正在使用“graphql-server-express”:“^ 0.8.0”和“graphql-tools”:“^ 1.0.0”答案 0 :(得分:3)
如果您使用的是graphql-js
,则有很多地方使用Object.create(null)
创建新对象,这与[{1}}不同,您可以在此处阅读有关此内容的说明{{3} }
但基本上使用{}
创建的对象没有Object.create(null)
方法
您可以在节点中使用
进行尝试hasOwnProperty
您可以使用另一种方法来确定对象是否具有可用于使用const obj1 = Object.create(null)
console.log(typeof obj1.hasOwnProperty)
// 'undefined'
const obj2 = {}
console.log(typeof obj2.hasOwnProperty)
// 'function'
创建的对象的键
Object.create(null)
答案 1 :(得分:1)
您可以通过以下方式将其转换为标准对象:
class musicPlayer {
public static var instance = musicPlayer()
var player = AVPlayer()
func initPlayer(url : String) {
guard let url = URL.init(string: url) else { return }
let playerItem = AVPlayerItem.init(url: url)
player = AVPlayer.init(playerItem: playerItem)
playAudioBackground()
}
func playAudioBackground() {
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault, options: [.mixWithOthers, .allowAirPlay])
print("Playback OK")
try AVAudioSession.sharedInstance().setActive(true)
print("Session is Active")
} catch {
print(error)
}
}
func pause(){
player.pause()
}
func play() {
player.play()
}
}
答案 2 :(得分:0)
好的,经过一段时间的反复试验后,我能够解决问题。更改我传递给.merge函数的对象的位置是解决方案。工作代码是:
const args = _.merge(auth, { params: parameter });
两者都是对象,但似乎来自graphql变量的对象没有所需的hasOwnProperty方法。简单地说,而不是复制好的对象" (auth)进入坏的(参数),我将坏的一个复制到具有所需功能的好的一个。
希望这有助于其他遇到此错误的人。