【发布时间】:2019-06-14 11:41:32
【问题描述】:
我遇到了一个问题,我可以看到“arrayOfResults”的数组和数据,但是当我尝试访问数组的某个部分时,它显示未定义。我知道这与异步调用有关,因为如果我将 console.log 设置为超时,它会正确显示。一般来说,我对异步调用很陌生,更不用说等待了。感谢您的帮助!
async function convertToCSV() {
var userInput = document.getElementById("thing").value; //value from text area
var arrayOfUserInput = userInput.split('\n').map(str => str.replace(/\s/g, '')); //converts userInput to array and removes whitespace
var arrayOfResults = new Array();
//iterates for how many user inputs are recorded into arrayOfUserInput
for(i = 0; i < arrayOfUserInput.length; i++){
//awaits for each result of retrieve data before inputing into arrayofresults
arrayOfResults[i] = await retrieveData(arrayOfUserInput[i]);
}
//*****THIS IS THE PART NOT WORKING CORRECTLY****
console.log(arrayOfResults[0][0]);
}
async function retrieveData (clientRecord){
//pulling data from API
var request = require("request");
var resultsArr = new Array();
var options = { method: 'POST',
url: 'blah',
body: ''
request(options, function (error, response, body) {
var resData = JSON.parse(body); //stores json response into object
// Do Work here
return resultsArr;
}
当我 console.log arrayOfResults[0] 我正确接收到所有数据。
当我像上面那样 console.log arrayOfResults [0][0] 时,除非我设置超时以实际等待结果,否则我会得到未定义。
【问题讨论】:
-
async/await (Promise) 代码和回调代码不能相互配合。承诺
request. -
换句话说,
retrieveData()函数必须返回一个将被解析的承诺。 -
能否简化问题,现阶段读起来有点复杂,如果你能把问题浓缩,你会得到更好的答案。
-
@RandyCasburn 是来自 Devzer0 的代码/评论在正确的轨道上吗?我尝试实现他的代码,但仍然得到相同的结果。再次感谢大家的宝贵时间!
-
您似乎发布了敏感/私人信息。请重置您的密码和/或撤销 API 密钥和令牌,因为它们在互联网上发布时被视为已泄露。
标签: javascript json ecmascript-6