我的Parse后台工作是用某些标准ping eBay的API,然后用生成的JSON做事。生成的JSON为httpResponse.text
,我在eBayResponseText
函数中使用参数buildEbayRequestPromises
表示。
eBayResults
是top3
数组的数组。我知道eBayResponseText
是有效且正确的JSON,因为当我在buildEbayRequestPromises
的开头调度它时,它打印出我期望的所有eBay JSON。
但是,出于某种原因,当我在eBayResults
函数中的console.log matchCenterComparison
时,它只是, , ,
而不是4 top3
数组我我期待着。
因此,当我尝试将Parse对象保存到以eBayResults
作为属性的用户帐户时,该属性显示为[null,null,null,null]
。我不知道为什么它没有正确阅读eBayResponseText
。我是如何解析JSON的?
构建eBayResults
数组的函数:
/* Previous code is asynchronously pinging eBay API, and the below code runs once
that is done */
.then(function() {
// process promises, return query promise
return Parse.Promise.when(shared.promises).then(function() {
// process the results of the promises, returning a query promise
console.log('were in the when.then of promise');
var eBayResults = [];
for (var i = 0; i < arguments.length; i++) {
var httpResponse = arguments[i];
// since they're in the same order, this is OK:
var searchTerm = shared.searchTerms[i];
// pass it as a param:
var top3 = buildEbayRequestPromises(httpResponse.text, searchTerm);
eBayResults.push(top3);
}
return eBayResults;
});
});
buildEbayRequestPromises:
// process matchCenterItem results to build eBay promises
function buildEbayRequestPromises(eBayResponseText, shared) {
// ... code that pushes items into shared.promises and shared.searchTerms ...
console.log('so heres what the ebayresponsetext is:' + eBayResponseText);
var ebayResponse = JSON.parse(eBayResponseText);
var matchCenterItems = [];
//Parses through ebay's response, pushes each individual item and its properties into an array
ebayResponse.findItemsByKeywordsResponse.forEach(function(itemByKeywordsResponse) {
itemByKeywordsResponse.searchResult.forEach(function(result) {
result.item.forEach(function(item) {
matchCenterItems.push(item);
});
});
});
var top3Titles = [];
var top3Prices = [];
var top3ImgURLS = [];
var top3ItemURLS = [];
//where the title, price, and img url are sent over to the app
matchCenterItems.forEach(function(item) {
var title = item.title[0];
var price = item.sellingStatus[0].convertedCurrentPrice[0].__value__;
var imgURL = item.galleryURL[0];
var itemURL = item.viewItemURL[0];
top3Titles.push(title);
top3Prices.push(price);
top3ImgURLS.push(imgURL);
top3ItemURLS.push(itemURL);
});
console.log('about to define top3 value');
var top3 =
{
"Top 3":
[
{
"Title": top3Titles[0],
"Price": top3Prices[0],
"Image URL": top3ImgURLS[0],
"Item URL": top3ItemURLS[0]
},
{
"Title": top3Titles[1],
"Price": top3Prices[1],
"Image URL": top3ImgURLS[1],
"Item URL": top3ItemURLS[1]
},
{
"Title": top3Titles[2],
"Price": top3Prices[2],
"Image URL": top3ImgURLS[2],
"Item URL": top3ItemURLS[2]
}
]
};
}
matchCenterComparison:
function matchCenterComparison(eBayResults) {
console.log('eBayResults are the following:' + eBayResults);
//rest of the code snipped out for the sake of space in this post
}
答案 0 :(得分:1)
在buildEbayRequestPromises()
函数中,您正在创建一个名为top3的变量,但实际上并没有将它从函数返回到调用代码。
// at the end of the function
return top3;
那实际上是&#34;返回&#34;或者将值传回给调用代码......仅仅命名相同的东西是不够的,它们具有不同的范围。
如果您不熟悉变量范围,我建议您阅读它,因为这是理解的关键。