【发布时间】:2017-09-19 08:34:45
【问题描述】:
我希望我的函数一直执行到 nextPageToken 为空。当我第一次执行该函数时,它会等待 promise 被解决。但是,一旦响应中出现 nextPageToken,该函数就不会等待响应并发生堆栈溢出。
似乎 f() 在调用 await p.then() 时没有挂起。
我完全误解了 async/await 的工作原理吗?
任何帮助将不胜感激...
public apiResult2(path: string, objectName: string, params: any = { }) {
let returnArray = [];
const p = new Promise<any> ((resolve, reject) => {
gapi.load('auth2:client', () => {
gapi.client.request({
path: path,
params: params
}).then(response => {
// resolve this promise with the first key in the response object.
resolve(response.result);
}, reason => {
console.log(reason);
reject(reason.result);
});
});
});
let f = async () => {
let nextPageToken = null;
do {
let r = await p.then(result => {
if (result.hasOwnProperty(objectName)) {
for (let obj of result[objectName]) {
returnArray.push(obj);
}
}
if (result.hasOwnProperty('nextPageToken')) {
params.nextPageToken = result.nextPageToken;
return result.nextPageToken;
// nextPageToken = result.nextPageToken;
} else {
params.nextPageToken = null;
return null;
// nextPageToken = null;
}
});
nextPageToken = r;
console.log(r);
} while (nextPageToken);
};
f();
return returnArray;
}
【问题讨论】:
标签: javascript typescript asynchronous async-await