2016-05-20 106 views
-1

我正在使用實習生JS/leadfood測試框架。我正在使用executeAsync。我期望executeAsync的返回值傳遞給executeAsync的回調函數,但這不會發生。以下工作應該如何?executeAsync不傳遞返回值到回調

return this.remote.get(require.toUrl(url)); 
    //do stuff 
    .executeAsync(function (done) { 

     require([<library>], 
      function ([<function>]) { 
       return <function which returns Promise> 
       .then(function (value) { 
        return <function which returns Promise> 
       ... 
       }).then(function() { 
        done(window.location); 

       }) 
      }) 

    }) 
    .then(function (loc) { 
     console.log(loc); 
    }) 

執行成功執行到executeAsync的最後一個回調。調用executeAsync的回調已成功調用。但傳遞給executeAsync回調的值是undefined

編輯: 我發現,即使你設置了非常大量的executeAsync超時,超時會,如果你不叫this.async(timeout)指定正確的超時忽略(默認爲30秒的時間寫作)。所以問題在於測試時間超過了30秒,而傳遞完成的值並沒有使它回到executeAsync的回調。

回答

2

executeAsync使用回調來確定其功能何時完成運行。 (如果你沒有通過任何其他的唯一參數)的executeAsync函數此回調將自動作爲最後一個參數傳遞:

define([ 
    'require', 
    'intern!object' 
], function (
    require, 
    registerSuite 
) { 
    registerSuite({ 
     name: 'test', 

     foo: function() { 
      return this.remote.get(require.toUrl('./index.html')) 
       .setExecuteAsyncTimeout(5000) 
       .executeAsync(function (done) { 
        var promise = new Promise(function (resolve) { 
         setTimeout(function() { 
          resolve(); 
         }, 1000); 
        }); 

        promise.then(function() { 
         return new Promise(function (resolve) { 
          setTimeout(function() { 
           resolve(); 
          }, 1000); 
         }); 
        }).then(function() { 
         done(window.location); 
        }); 
       }) 
       .then(function (loc) { 
        // This prints out a full location object from the 
        // browser. 
        console.log(loc); 
       }); 
     } 
    }); 
}); 
+0

我實現它,因爲你在這裏有代碼,但是'value'對我來說還是'undefined'。什麼是「完成」? – cosmosa

+0

正如我所說的,'executeAsync'函數會自動傳遞一個回調作爲它的最後一個參數。這個回調函數可以調用任何你想要的東西(我通常稱之爲「完成」),應該在完成它所做的任何事情時由你的'executeAsync'函數調用。你不能從'executeAsync'函數返回一個承諾(你可以,但實習生不會注意它)。 'executeAsync'函數將在瀏覽器中運行,Promise可能不可用,因此Intern使用回調而不是承諾來獲取其返回值。 – jason0x43

+0

因此,在傳遞給'executeAsync'的'script'參數傳入一個名爲'done'的函數之後,然後調用'done'作爲'executeAsync'中的最後一步來表明它已經完成執行,我期望值傳遞給'executeAsync'的回調函數(本例中爲'value')爲傳遞給'done'的值。但是'value'仍然是'undefined'。 – cosmosa

0

按照Leadfoot文件在這裏

https://theintern.github.io/leadfoot/module-leadfoot_Command.html#executeAsync

返回

遠程代碼返回的值。只能將可以序列化爲JSON的值以及DOM元素返回。

你從執行函數返回什麼?

+0

我返回一個數組,所以這不應該是一個問題。 – cosmosa

+0

@ cosmos1990你確定嗎?看起來你可能實際上正在返回一個承諾,最終解決爲一個數組。絕對不是一回事。 –

+0

可能是這樣。無論如何,我現在傳入一個回調函數並調用它,而不是像@ jason0x43所建議的那樣返回一個值。 – cosmosa