簡體   English   中英

承諾返回數據不能分配給類變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM