JavaScript异步函数GoogleSheetAPI,因为是公式检索,数据可用性延迟?如何克服?
JavaScript asynchronous function Google Sheet API, data availability is delayed due to being a formula retrieval? How to overcome?
我正在使用 Google Sheets gapi.update
编写公式,然后立即调用函数 makeApiCall,尝试从该单元格检索数据,gapi.get.
这个检索查询的第一次迭代几乎不可避免returns undefined
,因为公式没有及时处理请求。
我尝试制作一个 for 循环来重复请求,与 !==null
相比,此循环在检索单个响应之前执行 4 次迭代。但是,所需的值通常会在第二次查询后 returned 到控制台。我还尝试用时间延迟重写它,它似乎并没有真正休眠,它们只是延迟显示数据。我还尝试使用 async function + await + return 重写并设法等待 undefined 的 return 但没有循环获取所需的数据。
是否有一种简单的方法来延迟请求。或者每个之间 awit
?
async function makeApiCall(pos) {
var params = {
spreadsheetId: 'GoogleSpreadsheetID',
range: 'Sheet1!B1',
};
var i;
for (i = 0; i < 4; i++) {
var request = gapi.client.sheets.spreadsheets.values.get(params);
request.then(function(response) {
dataOu = (response.result.values);
if (dataOu.value !== null) {
displayRes(pos)
}
});
}
我的预期结果是我的全局变量 dataOu
从公式中检索 >null
,如果没有,它应该重复查询。
有没有办法将其编写为适当的异步函数,如果未收到所需的响应,则会重复请求。或在 for 循环迭代之间建立计时器的方法。这不是一个简单的异步调用,因为它不只是等待响应,而是要检索特定响应。
是的,这应该很容易实现 await
:
async function makeApiCall(pos) {
const params = {
spreadsheetId: 'GoogleSpreadsheetID',
range: 'Sheet1!B1',
};
let response = await gapi.client.sheets.spreadsheets.values.get(params);
while (response.result.values == null) { // or whatever you need to check
await new Promise(resolve => setTimeout(resolve, 5)); // delay the loop a bit
response = await gapi.client.sheets.spreadsheets.values.get(params); // try again
}
const dataOu = (response.result.values);
if (dataOu.value !== null) {
displayRes(pos);
}
}
我正在使用 Google Sheets gapi.update
编写公式,然后立即调用函数 makeApiCall,尝试从该单元格检索数据,gapi.get.
这个检索查询的第一次迭代几乎不可避免returns undefined
,因为公式没有及时处理请求。
我尝试制作一个 for 循环来重复请求,与 !==null
相比,此循环在检索单个响应之前执行 4 次迭代。但是,所需的值通常会在第二次查询后 returned 到控制台。我还尝试用时间延迟重写它,它似乎并没有真正休眠,它们只是延迟显示数据。我还尝试使用 async function + await + return 重写并设法等待 undefined 的 return 但没有循环获取所需的数据。
是否有一种简单的方法来延迟请求。或者每个之间 awit
?
async function makeApiCall(pos) {
var params = {
spreadsheetId: 'GoogleSpreadsheetID',
range: 'Sheet1!B1',
};
var i;
for (i = 0; i < 4; i++) {
var request = gapi.client.sheets.spreadsheets.values.get(params);
request.then(function(response) {
dataOu = (response.result.values);
if (dataOu.value !== null) {
displayRes(pos)
}
});
}
我的预期结果是我的全局变量 dataOu
从公式中检索 >null
,如果没有,它应该重复查询。
有没有办法将其编写为适当的异步函数,如果未收到所需的响应,则会重复请求。或在 for 循环迭代之间建立计时器的方法。这不是一个简单的异步调用,因为它不只是等待响应,而是要检索特定响应。
是的,这应该很容易实现 await
:
async function makeApiCall(pos) {
const params = {
spreadsheetId: 'GoogleSpreadsheetID',
range: 'Sheet1!B1',
};
let response = await gapi.client.sheets.spreadsheets.values.get(params);
while (response.result.values == null) { // or whatever you need to check
await new Promise(resolve => setTimeout(resolve, 5)); // delay the loop a bit
response = await gapi.client.sheets.spreadsheets.values.get(params); // try again
}
const dataOu = (response.result.values);
if (dataOu.value !== null) {
displayRes(pos);
}
}