vue中Promise { pending }是什麼?爲何會出現這種狀態,怎麼解決這種問題?

首先你需要知道 promise 要用then接收或者async await
例如:a() 是一個Promise封裝的方法

 

// 定義一個變量直接a() 賦值給 b
let b = this.a()
console.log(b)  //這裏就會返回 Promise {<pending>}

第一種方式 then 接收 ,也就是收把所需數據在then中得到,後續邏輯也只能在then中實現

let b = this.a()
.then(res =>{
	//.then是接收正確返回的信息
	console.log(res) // {...}
})
.catch(err =>{
	// .catch 返回報錯信息
	console.log(err)
})

第二種方式 async await接收:

async c(){
	let b = await this.a()
	console.log(b)  // 現在就是正確返回了 {...}
	
}

這裏要注意的是 async 和 await 必須是一起的


這裏說下爲什麼會這樣???

Promise是異步執行的, 什麼叫異步呢, 就是你以爲代碼是一行執行完才執行下一行嗎? 不是的, 你promise還沒執行then的時候,就開始執行下一行了,導致獲取的數據出現pending狀態

比如以下用法是有問題的:

let table_id = getTableIdByColumnId(that,id).then(res => {
      return res.data.table_id
    });
goToTableDetail(that,table_id);

then還沒有return時候,已經開始執行goToTableDetail(that,table_id);,導致table_id 爲object 出現pending情況。

正確用法:

getTableIdByColumnId(that,id).then(res => {
      console.info(res);
      goToTableDetail(that,res.data.table_id);
    });

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章