如何通过 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);
    }
}