함수 밖에서 전역 변수를 초기화하고, 함수 내에서 변수를 설정 한 다음, 함수 뒤에 변수 값을 출력하고 싶습니다. 그러나 인쇄 할 때 No Message Provided
을 로그 아웃합니다.함수 내에 전역 변수 설정하기
이 경우 itemLocation 변수를 사용하여이 작업을 시도하고 있습니다.
var itemLocation;
Parse.Cloud.define("eBayCategorySearch", function (request, response) {
url = 'http://svcs.ebay.com/services/search/FindingService/v1';
Parse.Cloud.httpRequest({
url: url,
params: {
'OPERATION-NAME': 'findItemsByKeywords',
'SERVICE-VERSION': '1.12.0',
'SECURITY-APPNAME': '*APP ID GOES HERE*',
'GLOBAL-ID': 'EBAY-US',
'RESPONSE-DATA-FORMAT': 'JSON',
'itemFilter(0).name=ListingType': 'itemFilter(0).value=FixedPrice',
'keywords': request.params.item,
},
success: function (httpResponse) {
// parses results
var httpresponse = JSON.parse(httpResponse.text);
var items = [];
httpresponse.findItemsByKeywordsResponse.forEach(function (itemByKeywordsResponse) {
itemByKeywordsResponse.searchResult.forEach(function (result) {
result.item.forEach(function (item) {
items.push(item);
});
});
});
// count number of times each unique primaryCategory shows up (based on categoryId), returns top two IDs and their respective names
var categoryIdResults = {};
// Collect two most frequent categoryIds
items.forEach(function (item) {
var id = item.primaryCategory[0].categoryId;
if (categoryIdResults[id]) categoryIdResults[id]++;
else categoryIdResults[id] = 1;
});
var top2 = Object.keys(categoryIdResults).sort(function (a, b) {
return categoryIdResults[b] - categoryIdResults[a];
}).slice(0, 2);
console.log('Top category Ids: ' + top2.join(', '));
var categoryNameResults = {};
// Collect two most frequent categoryNames
items.forEach(function (item) {
var categoryName = item.primaryCategory[0].categoryName;
if (categoryNameResults[categoryName]) categoryNameResults[categoryName]++;
else categoryNameResults[categoryName] = 1;
});
var top2Names = Object.keys(categoryNameResults).sort(function (a, b) {
return categoryNameResults[b] - categoryNameResults[a];
}).slice(0, 2);
console.log('Top category Names: ' + top2Names.join(', '));
// compare categoryIdResults to userCategory object
//Extend the Parse.Object class to make the userCategory class
var userCategory = Parse.Object.extend("userCategory");
//Use Parse.Query to generate a new query, specifically querying the userCategory object.
query = new Parse.Query(userCategory);
//Set constraints on the query.
query.containedIn('categoryId', top2);
query.equalTo('parent', Parse.User.current())
//Submit the query and pass in callback functions.
var isMatching = false;
query.find({
success: function (results) {
var userCategoriesMatchingTop2 = results;
console.log("userCategory comparison success!");
console.log(results);
for (var i = 0; i < results.length; i++) {
itemCondition = results[i].get("itemCondition");
console.log(itemCondition);
itemLocation = results[i].get("itemLocation");
console.log(itemLocation);
minPrice = results[i].get("minPrice");
console.log(minPrice);
maxPrice = results[i].get("maxPrice");
console.log(maxPrice);
itemSearch = request.params.item;
console.log(itemSearch);
}
if (userCategoriesMatchingTop2 && userCategoriesMatchingTop2.length > 0) {
isMatching = true;
}
response.success({
"results": [{
"Number of top categories": top2.length
}, {
"Top category Ids": top2
}, {
"Top category names": top2Names
}, {
"Number of matches": userCategoriesMatchingTop2.length
}, {
"User categories that match search": userCategoriesMatchingTop2
}, {
"Matching Category Condition": itemCondition
}, {
"Matching Category Location": itemLocation
}, {
"Matching Category MaxPrice": maxPrice
}, {
"Matching Category MinPrice": minPrice
}, {
"Search Term": itemSearch
},
]
});
console.log('User categories that match search: ', results);
},
error: function (error) {
//Error Callback
console.log("An error has occurred");
console.log(error);
}
});
},
error: function (httpResponse) {
console.log('error!!!');
response.error('Request failed with response code ' + httpResponse.status);
}
});
});
console.log(itemLocation);
불필요한 코드를 모두 제거하여 문제가 재현 될 수 있습니까? 또한 "define"메서드로 인해 requireJS를 사용하고 있다고 가정합니다. 그게 사실인가요, 아니면 당신 자신의 구조 중 하나를 정의합니까? 그것이 사실이라면 eBayCategorySearch 의존성이 해결되었는지 확인하는 방법이 있습니까? –
이것은 httpRequest의 비동기 동작 때문에 발생하는 것으로 보입니다. 필요한 것은 콜백을 전달하거나 약속을 사용하는 것입니다. –
@PatViafore, define 메소드는 Parse.com의 문서 일부입니다. – Ghobs