我一般都不熟悉React Native和编码。我花了一些代码来完成工作,并且很难将其集成到我的程序中。
async pullBatch(since){
let param = {
userScreenName: '?screen_name=google',
count: "&count=5",
retweets: "&include_rts=false",
replies: "&exclude_replies=false",
trim: "&trim_user=true",
since: "&max_id=" + since
};
let twitterRest = new TwitterRest(); //create a new instance of TwitterRest Class
let batch = await twitterRest.pullTweets(param); //pull the Google TimeLine
return batch;
}
pullTimeline(){
let timeLine = []
for(i = 0; i <= 2; i++){
let currentBatch = this.pullBatch("1098740934588751900")
console.log(currentBatch);
timeLine = timeLine.concat(currentBatch);
}
console.log(timeLine);
// timeLine = currentBatch
return(timeLine)
}
我相信,当运行pullTimeLine()时,程序将返回三个promise的数组。 (在pullBatch()之前,我也使用“ await”运行了代码,但是错误地告诉我await是保留字)这意味着我犯了两个错误:
我一直在努力学习,因此,尽管我非常感谢有关代码修复的建议,但如果您能教给我有关理解的错误之处,我也将不胜感激。
谢谢
答案 0 :(得分:2)
让我们分解一下。您似乎了解pullBatch
是一个异步函数,因此调用它将返回由twitterRest交互创建的Promise。
问题是您在for循环中对pullBatch
的调用将无法解决这些承诺(这似乎是您想要做的)。最简单的方法是对await
使用currentBatch
,但是在尝试时会得到保留的错误。基本上,您只需要像这样使pullTimeline
异步:
async pullTimeline(){
...
只需意识到,一旦执行此操作,pullTimeline
现在就是一个异步函数,该函数还将返回一个promise。因此,要使用此功能,您需要使用.then()
,例如:
pullTimeline().then(timeLine => {
// do something with your timeline here
})
或者如果您在另一个异步函数中使用它,则可以使用await。
const timeLine = await pullTimeline() // must be inside async function
基本上,在调用链中的某个时刻,您将必须使用.then()
来解决一个Promise,或者通过创建顶级异步函数来忽略顶级Promise。例如:
async useTimeline() {
const timeLine = await pullTimeline()
// do something with your timeline
}
// call the function above, and just disregard its promise
useTimeLine()
别忘了在某个地方处理错误。在您的最高承诺中使用.catch()
,或者在您的任何等待呼叫中使用try / catch
。