0

任何人都可以帮助我找到解决此问题的方法。我有(假设)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(.....);
}

任何帮助都会很棒。

4

1 回答 1

2

因此,听起来您的第一个功能基本上是其他测试的设置功能。

可以这样做 -基本上使用 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;
                    }
                }
            ]);

当然,如果可以安排一个测试函数返回一个 Deferred,那就太好setUp了,但是现在 doh 不支持这个(从 v1.7.2 开始)。

于 2012-03-07T20:56:14.127 回答