我使用以下函数在我的Protractor测试中调用API,有时API需要时间来响应。
public abstract class BaseView extends FXMLView {
public static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("bundleName");
public BaseView() {
this.bundle = RESOURCE_BUNDLE;
}
public BaseView(ResourceBundle bundle) {
this.bundle = bundle;
}
}
在测试脚本中调用这些函数:
var request = require( "superagent" );
var PostUrl = browser.baseUrl + 'rest/1.0/dev/users';
var CreateTenantUrl = browser.baseUrl + 'rest/1.0/tenant';
exports.CreateTenant = function(body){
var data = '{' + body + '}';
request.post(CreateTenantUrl).set('Content-Type', 'application/json').set('serviceSharedSecret', 'sharedsecret').send(data).end(function(err,res){
if(err){
console.log("CreateTenant post error= ", err )
} else{
console.log("CreateTenant post response = ", res.status)
}
expect(res.status).toEqual(200)
});
};
exports.CreateUsers = function(body){
var data = '{' +body + '}';
request.post( PostUrl ).set('Content-Type', 'application/json').send(data).end(function(err,res){
if(err){
console.log("CreateUsers post error= ", err )
} else{
console.log("CreateUsers post response = ", res.status)
}
expect(res.status).toEqual(202)
});
};
有没有办法等待每个API调用完成然后执行下一个?
答案 0 :(得分:1)
如果您需要第二个API调用仅在第一个API调用完成后触发,请在第一个API调用的回调方法中发送第二个API调用。
完成API调用的'等待'是非常糟糕的做法。不做的示例如下:发送一个API调用等待10秒,检查第一个调用是否完成,如果有,则发送第二个api调用,否则再等待10秒并重复该过程。它几乎总是更好的方法是使用回调,在API调用完成时会发出警报。
对于您的示例,您应该执行以下操作:
var merge = require('merge-stream');
gulp.task('process-css-debug', function() {
var first = gulp
.src('src/**/app.scss')
.pipe(gp.plumber())
.pipe(gp.sass().on('error', gp.sass.logError))
.pipe(gp.autoprefixer())
.pipe(gp.rename('app.min.scss'))
.pipe(gulp.dest('./app'));
var second = gulp
.src('src/**/app.inline.scss')
.pipe(gp.plumber())
.pipe(gp.sass().on('error', gp.sass.logError))
.pipe(gp.autoprefixer())
.pipe(gp.rename('app.inline.min.scss'))
.pipe(gulp.dest('./app'));
return merge(first, second);
});
答案 1 :(得分:0)
为了等待请求完成,您需要将其包含在promise中。有关详细信息,请参阅How to make superagent return a promise