2016-05-22 39 views
1

我已經創建了一個用Node.js寫的小型OpenWhisk動作。此操作會調用後端系統。執行動作的函數如下所示(我刪除了與此問題無關的部分代碼)。如何使用IBM Bluemix中的API Manager在OpenWhisk中調用異步操作?

/** 
    * 
    * main() will be invoked when you Run This Action. 
    * 
    */ 


function main() { 

    var request = require("request"); 

    var data = { 
    }; 

    var options = { 
     method: "POST", 
     url: "https://whatever.it.is", 
     body: data, 
     json: true 
    }; 

    request.post(options, function(error,response,body) { 
     var data = []; 
     return whisk.done({"msg":data}); 
    }); 

    return whisk.async(); 
} 

然後我試圖在Bluemix API Manager中定義一個API調用。調用完成。但是,作爲結果,我收到了該活動的Id,而不是使用whisk.done()返回的內容。

有什麼想法?提前致謝。

回答

2

Tldr:blocking=true附加到您的URL的查詢中,以在相同的HTTP請求中返回激活的結果。


說到OpenWhisk中的動作調用,您可以選擇兩種不同的模式。 阻止非阻塞

非阻塞調用是默認的,在那裏你你對OpenWhisk後端POST有效載荷,並取回一個激活ID,其下您的調用(又名激活)的結果將被保存。您可以通過Activations API在稍後的時間點獲得這些結果(因此非阻塞)。

阻塞調用將等待您的激活完成,並在同一個HTTP請求返回結果。阻止請求通過相同的API進行,但附加了查詢參數blocking=true

你的問題聽起來像你最有可能想要一個阻止調用。查詢參數的變化可以在OpenWhisk REST API Reference找到。

+0

謝謝,markusthoemmes。這解決了我的問題。我知道阻塞和非阻塞......但我不知道這是我的問題的起源。 恕我直言,儘管如此,如果您要求阻止調用,響應中的JSON對象將返回activationId和響應。 – GNF

相關問題