Мне нужна помощь здесь ... Я использую сторонний метод, который принимает в нем обратный вызов ... так что теперь, если я хочу использовать его в WDIO, мне нужно обернуть этот метод внутри обещания ... Итак, я сделал следующее:
post(env, userAccount, canonical, isItQuery){
let options = { ..... };
return new Promise(function(resolve, reject){
request.post(options,function(error, response){
logger.info('In to the callback of request post');
if(!error){
resolve(response);
}
else{
reject(error);
}
});
});
}
И я попытался вызвать этот метод внутри stepDefinition следующим образом:
rm.post(env,userAccountID,payloadName,true).then(function(resp) {
console.log('Response: ' + resp);
})
.catch(function(error){
console.log("ERROR: " + error);
})
Во время выполнения скрипт не ожидает ответа от метода request.post
... и выполнение завершается без его ответа ... Пожалуйста, помогите мне, как я могу сделать эту работу ...
Я пробовал то же самое, используя request-promise
npm-module, который возвращает promise
вместо того, чтобы принимать обратный вызов и получать ту же проблему:
Вот пример кода:
import {defineSupportCode} from 'cucumber';
import request from 'request-promise';
import config from 'config';
import fs from 'fs';
require('request-promise').debug = true;
defineSupportCode(function({Given, When, Then}){
Given(/^Run the "([^"]*)" with user_session of "([^"]*)"$/, (canonical, user_session) => {
.......
.......
const payload = fs.readFileSync(path,{encoding:'utf8'});
let options = {
...........
...........
};
request(options)
.then(function ($) {
console.log($);
})
.catch(function (err) {
console.log('error');
});
});
});
Я использую wdioRunner с sync:true
. Я использую огуречный фреймворк.
Спасибо!!