如何return common js模块中来自web服务的数据
How to return data from web service in common js module
我正在使用 Titanium Alloy 编写移动应用程序。我不明白如何编写一个 return 对象的模块。我写的版本returns "undefined"。
任何帮助将不胜感激!
这是我在 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
语句,因此 return undefined
是正确的。由于内部使用的 API 确实使用回调,因此无法以这种显式方式编写代码,而您的 GetItemDetails
方法可能需要回调作为您在 onload
or/and onerror
.
我希望这能解释问题。
使用回调
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);
}
});
我正在使用 Titanium Alloy 编写移动应用程序。我不明白如何编写一个 return 对象的模块。我写的版本returns "undefined"。
任何帮助将不胜感激!
这是我在 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
语句,因此 return undefined
是正确的。由于内部使用的 API 确实使用回调,因此无法以这种显式方式编写代码,而您的 GetItemDetails
方法可能需要回调作为您在 onload
or/and onerror
.
我希望这能解释问题。
使用回调
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);
}
});