[英]Promise return data cannot be assigned to class variable?
我正在嘗試將Promise返回的值分配給變量,但未分配。 當我console.log(this.imageref1)時,我仍然得到空字符串。 此處的目的是獲取data.downloadURL,將照片上傳到Firebase后將返回該數據。 我需要downloadURL。 將其存儲在圖像路徑的數據庫中。 我被困在這里,我的數據庫為downloadURL獲取空數據。
post_news(form: NgForm){
this.title = form.value.title;
this.content = form.value.content;
this.category = form.value.category;
console.log(this.capturedimage1);
if(this.capturedimage1 !== ''){
//console.log('captured image is not empty');
let storageRef = firebase.storage().ref();
const filename = Math.floor(Date.now() / 1000);
const imageRef = storageRef.child(`images/${filename}.jpg`);
let uploaded_file_path = `images/${filename}.jpg`;
imageRef.putString(this.capturedimage1, firebase.storage.StringFormat.DATA_URL).then(data=>{
this.imageref1 = data.downloadURL;
});
}
}
var that = this;
imageRef.putString(this.capturedimage1, firebase.storage.StringFormat.DATA_URL)
.then(data=>{
that.imageref1 = data.downloadURL;
return Promise.resolve(data.downloadURL);
})
.then(function(url){
//make the db call.
});
最終,該值被確定了。 可能您正在為它在封閉函數執行完之后發生的事實而苦苦掙扎。 例如,這是一個非常簡單的測試用例:
function test(x) {
x.a = 1;
Promise.resolve(true).then(_ => x.b = 2);
console.log(x);
}
操作,
> test({c: 3})
{ c: 3, a: 1 }
undefined
記錄一個尚不包含b: 2
的對象,然后返回undefined
。 當然,最終會設置該參數:
> test(abc = {c: 3})
{ c: 3, a: 1 }
undefined
> abc
{ c: 3, a: 1, b: 2 }
要了解實際情況,您需要了解所有JS都在“事件循環”內發生。 JavaScript一次只允許一件事情發生,因此,當您安排其他事件發生時,JS必須遵循以下規則:“首先執行此函數中的所有操作,然后找到其他已安排發生的事情。”
一些函數調用是同步發生的,它們阻止函數調用前進直到完成。 例如, [1,2,3].forEach(x => console.log('hello, ' + x))
將在完成之前將3個字符串記錄到控制台。 但是, 承諾值的全部要點是計算機正在忙於找出它,尚不可用。 因此,你只能實際使用的價值一旦它的發現,您的所有承諾 ,包括增加一個監聽器的操作的.then()
或.catch()
是異步或非阻塞 。 當前函數完成,並將這些回調置於事件循環中,以在完成承諾的計算時發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.