невозможно вернуть результат из обещания - PullRequest
0 голосов
/ 28 июня 2018

У меня есть следующий код

getNotesContent(){  
        this.svsDb.getNotes(this.order_info.orderid).then(
            data=>{
                console.log("the list of notes content...", data);
                data.history.forEach( (notes:any)=>
                this.noteList.push(
                    {
                        stack:[
                            {text: 'Date: ' + notes.created_date},
                            {text: 'Note/Comments: ' + notes.notes},
                            { text: '--------------------------' },
                        ]
                    }
                )
            )

            }); 

       return this.noteList;    

}

Мое возвращаемое значение всегда пусто. Может кто-нибудь сообщить мне, как я могу заставить эту функцию возвращать значение? Спасибо за вашу помощь.

A

1 Ответ

0 голосов
/ 28 июня 2018

Вы не можете, обещание разрешится позже. Когда вы вызываете функцию getNotesContent(), она вернется до того, как появятся какие-либо результаты. Похоже, вы возвращаете массив, который будет заполнен позже, так что он будет иметь значения, которые вы хотите. Однако, если вызывающему абоненту необходимо подождать и обработать эти результаты, вы должны вернуть обещание, и вызывающий абонент должен вызвать на нем then().

getNotesContent(){  
    return this.svsDb.getNotes(this.order_info.orderid)
    .then(data => {
        console.log("the list of notes content...", data);
        data.history.forEach((notes:any) => {
            this.noteList.push(
                {
                    stack:[
                        {text: 'Date: ' + notes.created_date},
                        {text: 'Note/Comments: ' + notes.notes},
                        {text: '--------------------------'},
                    ]
                }
            );
        });
        return this.noteList; // this will now be the promise results
   }); 
}

// sample call
getNotesContent().then(noteList => console.dir(noteList));
...