如何通过 JavaScript 中的回调链接承诺?
How to chain promises through a callback in JavaScript?
我目前正在编写与 Mocha、Chai 和 WebdriverIO 的集成测试。 WebdriverIO 语法需要一系列承诺才能在浏览器中导航,示例如下:
it('sign in and out test', function() {
return client
.url(Page.url)
.pause(20000)
.waitForVisible(HomePage.signInDropdown, 10000)
.click(HomePage.signInDropdown)
}
这会导致很长的代码块,每个步骤都有明确的布局。由于某些步骤(例如登录和注销)在不同的测试中经常使用,因此我想通过回调将这些代码片段模块化。但是,以下没有嵌套回调的语法会失败:
function myCallback(){
console.log('This is where I''d add promises');
}
it('sign in and out test',function() {
return client
.url(Page.url)
.pause(20000)
.then(function() {
myCallback();
}
.waitForVisible(HomePage.signInDropdown, 10000)
.click(HomePage.signInDropdown)
}
回调中的以下不同语法也会失败:
function myCallback(){
return client
.url(Page.url)
console.log('This is a callback using return');
}
鉴于 promises 主要是为了取代回调,在这种特殊情况下是否可以通过回调来延续 promise 链?
myCallback()
不是 return
从 .then()
编辑而来。
.then(function() {
// `return` value from `myallback()`
return myCallback();
})
注销承诺解决后,我们需要在链中做其他工作。
请检查这个,
function myCallback(){
return client
.url(Page.url)
}
it('sign in and out test',function() {
return client
.url(Page.url)
.pause(20000)
.then(function() {
myCallback()
.waitForVisible(HomePage.signInDropdown, 10000)
.click(HomePage.signInDropdown);
}
}
我目前正在编写与 Mocha、Chai 和 WebdriverIO 的集成测试。 WebdriverIO 语法需要一系列承诺才能在浏览器中导航,示例如下:
it('sign in and out test', function() {
return client
.url(Page.url)
.pause(20000)
.waitForVisible(HomePage.signInDropdown, 10000)
.click(HomePage.signInDropdown)
}
这会导致很长的代码块,每个步骤都有明确的布局。由于某些步骤(例如登录和注销)在不同的测试中经常使用,因此我想通过回调将这些代码片段模块化。但是,以下没有嵌套回调的语法会失败:
function myCallback(){
console.log('This is where I''d add promises');
}
it('sign in and out test',function() {
return client
.url(Page.url)
.pause(20000)
.then(function() {
myCallback();
}
.waitForVisible(HomePage.signInDropdown, 10000)
.click(HomePage.signInDropdown)
}
回调中的以下不同语法也会失败:
function myCallback(){
return client
.url(Page.url)
console.log('This is a callback using return');
}
鉴于 promises 主要是为了取代回调,在这种特殊情况下是否可以通过回调来延续 promise 链?
myCallback()
不是 return
从 .then()
编辑而来。
.then(function() {
// `return` value from `myallback()`
return myCallback();
})
注销承诺解决后,我们需要在链中做其他工作。
请检查这个,
function myCallback(){
return client
.url(Page.url)
}
it('sign in and out test',function() {
return client
.url(Page.url)
.pause(20000)
.then(function() {
myCallback()
.waitForVisible(HomePage.signInDropdown, 10000)
.click(HomePage.signInDropdown);
}
}