如何通过JavaScript中的回调链接承诺?

如何通过JavaScript中的回调链接承诺?,javascript,callback,promise,mocha.js,webdriver-io,Javascript,Callback,Promise,Mocha.js,Webdriver Io,我目前正在编写一个与Mocha、Chai和WebdriverIO的集成测试。WebdriverIO语法需要一系列承诺才能在浏览器中导航,下面是一个示例: it('sign in and out test', function() { return client .url(Page.url) .pause(20000) .waitForVisible(HomePage.signInDropdown, 10000) .click(HomePage.signInDr

我目前正在编写一个与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');
}
鉴于承诺主要用于替换回调,在这种特殊情况下,是否可以通过回调继续承诺链?

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);
    }
}

@JaromandaX没有说明
有任何“错误”。然后(myCallback)
@JaromandaX使用了该模式,在回答之前没有考虑到的其他问题和回答之后。刚刚注意到您在当前问题上的第二个评论,我建议,由于myCallback不接受任何参数,并且
.pause(20000)
可能是一个承诺不会引起任何兴趣的东西,在这种情况下是安全的-根本不批评您的代码,只是wondering@JaromandaX尝试尽可能少地调整OP的代码以返回预期结果。本次查询的答案也可在“请描述”中找到。控制台I上是否有任何错误(除了return语句后无法访问的代码)?不返回承诺(第一种语法)的
myCallback
版本不会阻止承诺链处理。文档说明
url
返回一个字符串。这是错误的还是误导性的?
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);
    }
}