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

时间:2017-09-29 05:39:43

标签: javascript callback promise mocha 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.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');
}

鉴于承诺主要是为了取代回调,在这种特殊情况下是否可以通过回调继续承诺链?

2 个答案:

答案 0 :(得分:0)

来自def quad(degree): if degree <= '90': angle = 'Quadrant 1' else: if degree <= '180': angle = 'Quadrant 2' else: if degree <= '270': angle = 'Quadrant 3' else: if degree <= '360': angle = 'Quadrant 4' return quad print (quad ('100')) 的{​​p> myCallback()不是return

.then()

答案 1 :(得分:-1)

退出承诺解决后,我们需要在链中做其他工作。

请检查一下,

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