有人能帮我找到解决这个问题的办法吗?我有(假设)3个doh函数,第一个是异步的,其余的是同步的。我必须首先调用异步函数,并将此函数的结果传递给其他两个函数,可以吗?
示例:
doh.register(".....", [
{
name : "asyncFunction",
runTest : function(){
function callback(result){
//How to pass the result to fun_2 and fun_3
//also fun_2 or fun_3 should be deferred until this function executes
}
}
},
function fun_2(result){
//doh.assertTrue(.....);
},
function fun_3(result){
//doh.assertTrue(.....);
}任何帮助都是最好的。
发布于 2012-03-08 04:56:14
因此,听起来您的第一个函数基本上是用于其他测试的设置函数。
这是可能的-基本上使用Deferreds/promises,但它有点麻烦,而且您可能会受到测试超时的严重刺激。
所以,这是一些需要2秒的异步代码的设置。所有的测试都变成了异步测试,一旦“设置”延迟完成,就会执行它们的工作。
因为您的“后续”测试已经成为异步测试,所以您需要确保它们的超时与您的异步设置所需的时间相匹配(至少对于碰巧运行的第一个测试是如此)。
// Some asynchronous initialization that takes 2s
setTimeout(function() {
setupCompletion.resolve({ result: 42 });
}, 2000);
doh.register("my.test1", [
{
name: "waits for async setup to complete",
timeout: 5000,
runTest: function() {
var d = new doh.Deferred();
setupCompletion.then(function (res) {
doh.is(42, res.result);
d.callback(true);
});
return d;
}
},
{
name: "also waits for async setup to complete",
timeout: 5000,
runTest: function() {
var d = new doh.Deferred();
setupCompletion.then(function (res) {
doh.is(43, res.result + 1);
d.callback(true);
});
return d;
}
}
]);当然,如果可以安排测试的setUp函数返回一个Deferred,那就太好了,但是doh目前还不支持这一点(从v1.7.2开始)。
https://stackoverflow.com/questions/8310789
复制相似问题