class Javascript 中的 Promises 和 nightmareJS
Promises and nightmareJS in class Javascript
所以我有这个噩梦般的代码,它运行得非常好,我把它放到了 class 中。但是它开始抛出承诺错误:-((没有 fun() 函数它工作正常。
class test {
constructor() {
this.init(() => {
this.start()
})
}
init() {
this.nightmare = new Nightmare({
show: true,
typeInterval: 20,
openDevTools: {
detach: true
}
});
}
async start() {
await this.nightmare
.useragent(userAgent)
.goto("https://www.yahoo.com")
fun();
async function fun() {
await this.nightmare.goto('https://google.com')
}
}
}
new test().start();
错误是:
(node:1101) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'nightmare' of undefined
(node:1101) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
这与 promises 或 await 没有任何关系。你得到一个错误,因为 this
没有引用你在 fun()
中的对象。当您创建一个函数并像使用 fun()
一样调用它时,您会丢失对对象的 this
引用。考虑:
class test {
constructor() {
this.init()
}
init() {
this.prop = "a property"
}
start() {
console.log("this outside of fun: ", this)
fun()
function fun(){
console.log("this in fun:", this)
}
}
}
new test().start()
您会看到 this
在 fun()
中未定义。
考虑使 fun()
成为一个真正的方法并使用 this.fun()
调用它或者您可以手动绑定 this
与类似的东西:
fun.call(this)
所以我有这个噩梦般的代码,它运行得非常好,我把它放到了 class 中。但是它开始抛出承诺错误:-((没有 fun() 函数它工作正常。
class test {
constructor() {
this.init(() => {
this.start()
})
}
init() {
this.nightmare = new Nightmare({
show: true,
typeInterval: 20,
openDevTools: {
detach: true
}
});
}
async start() {
await this.nightmare
.useragent(userAgent)
.goto("https://www.yahoo.com")
fun();
async function fun() {
await this.nightmare.goto('https://google.com')
}
}
}
new test().start();
错误是:
(node:1101) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'nightmare' of undefined
(node:1101) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
这与 promises 或 await 没有任何关系。你得到一个错误,因为 this
没有引用你在 fun()
中的对象。当您创建一个函数并像使用 fun()
一样调用它时,您会丢失对对象的 this
引用。考虑:
class test {
constructor() {
this.init()
}
init() {
this.prop = "a property"
}
start() {
console.log("this outside of fun: ", this)
fun()
function fun(){
console.log("this in fun:", this)
}
}
}
new test().start()
您会看到 this
在 fun()
中未定义。
考虑使 fun()
成为一个真正的方法并使用 this.fun()
调用它或者您可以手动绑定 this
与类似的东西:
fun.call(this)