【发布时间】:2021-05-17 04:43:09
【问题描述】:
所以我尝试使用数组上的 foreach 循环向 API 发出请求。该数组包含放入请求中的字符串列表
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var urlencoded = new URLSearchParams();
urlencoded.append("", "");
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
var array = [];
var data = [];
var importdata = new Promise((resolve, reject) => {
$.getJSON('name of json.json')
.then(response => {
data = response;
resolve(response)
})
.catch(err => {
reject(err)
})
})
var getAPIResults = new Promise((resolve, reject) => {
var xmlHttp = new XMLHttpRequest();
data.forEach((element) => {
console.log(element) // This isn't being outputted into the console, even though 'data' array has elements after running 'importdata'
xmlHttp.open( "GET", 'http://api.com/json/apiroute?key=xxxx-xxx-xxxx&dataitem='+element, true );
xmlHttp.send( null );
array.push(xmlHttp.responseText)
})
resolve(xmlHttp.responseText)
})
async function main () {
await importdata
await console.log(data)
await console.log(getAPIResults)
}
main()
我添加了一条未记录数据的评论
控制台如下所示:
{Data: {…}}
Data:
data: (1030) [expected data elements]
__proto__: Object
__proto__: Object
Promise {<fulfilled>: ""}
__proto__: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: ""
当getAPIResults 运行时,肯定应该有一个很长的元素列表(data 数组大约有 1000 个元素长)?
【问题讨论】:
-
为什么不使用 XHR 而不是
$.json? -
你的意思是使用
console.log(await getAPIResults),而不是await console.log(getAPIResults) -
顺便说一句,在将 jQuery deferreds 包装在真正的 Promise 中时,您可以避免使用
Promiseconstructor antipattern 和 just writePromise.resolve($.json(…))。