[英]How to return data from web service in common js module
我正在使用鈦合金編寫移動應用程序。 我不明白如何編寫一個將返回對象的模塊。 我寫的版本返回“未定義”。
任何幫助將不勝感激!
這就是我在index.js中使用模塊的方式
var ResArgs = require("WebData").GetItemDetails(args.barcode, args.type);
Ti.API.info("Received data from WebGetData: " + ResArgs);
這是實際的WebData.js模塊
exports.GetItemDetails = function(code, type) {
var url = "http://url/" + code + "/" + type;
var arg = null || {};
var client = Ti.Network.createHTTPClient({
// function called when the response data is available
onload : function(e) {
Ti.API.info("Received text from service: " + this.responseText);
return this.responseText;
},
// function called when an error occurs, including a timeout
onerror : function(e) {
Ti.API.debug(e.error);
alert('error: ' + e.error);
},
timeout : 5000 // in milliseconds
});
client.open("GET", url);
// Send the request.
client.send();
};
查看您的代碼GetItemDetails
沒有return
語句,因此正確返回undefined
。 由於內部使用的API確實使用回調,因此無法以這種顯式方式編寫代碼,而是您的GetItemDetails
方法可能需要將回調作為參數,在onload
或/和onerror
中onload
。
我希望可以解釋這個問題。
使用回調
exports.GetItemDetails = function(code, type, _callback) {
var url = "http://url/" + code + "/" + type;
var arg = null || {};
var client = Ti.Network.createHTTPClient({
// function called when the response data is available
onload : function(e) {
Ti.API.info("Received text from service: " + this.responseText);
_callback && _callback({success : true, data : this.responseText});
},
// function called when an error occurs, including a timeout
onerror : function(e) {
Ti.API.debug(e.error);
alert('error: ' + e.error);
_callback && _callback({success : false, error:e.error});
},
timeout : 5000 // in milliseconds
});
client.open("GET", url);
// Send the request.
client.send();
};
然后您將像這樣調用代碼
var ResArgs = require("WebData");
ResArgs.GetItemDetails(args.barcode, args.type, function(_response){
if ( _response.success ) {
Ti.API.info("Received data from WebGetData: " + _response.data);
} else {
Ti.API.error("ERROR from WebGetData: " + _response.error);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.