typescript - Bagaimana cara mengembalikan sebuah Promise dalam metode ini


Saya memiliki metode Typescript seperti ini dan saya ingin itu mengembalikan Promise, tapi hanya setelah baris this.user.currentCourseId=student.currentCourseId; dijalankan.

Apakah mungkin?

public getUserData()
{
    ...

    this.authState.auth.getToken().then(token =>
    {
        this.user.token = token;

        this.userService.update(this.user).then(student =>
        {
            this.user.currentCourseId = student.currentCourseId;
        });
    });
}

Jawaban #1

Seperti yang diungkapkan jfriend, Anda tidak bisa menunggu untuk mengembalikan sebuah promise sampai setelah itu selesai. Itu seperti menempatkan kereta di depan kuda. Anda mengembalikan promise segera, dan menautkannya untuk menunggu penyelesaiannya.

Saya hanya ingin menunjukkan bahwa Anda sebaiknya memanfaatkan chaining janji untuk menghindari kebiasaan tergelincir menuju "menara kehancuran":

public getUserData()
{
    ...

    // return promise from function
    return this.authState.auth.getToken().then(token =>
    {
        this.user.token = token;

        // return promise here to chain to original promise
        return this.userService.update(this.user)
    }).then(student => {
        this.user.currentCourseId = student.currentCourseId;
    });;
}

getUserDate().then(() => {
    // currentCourseId has been set now
});

Jawaban #2

Anda mengembalikan promise segera. Dan, setiap promise lain di dalam handler .then() pertama dikembalikan di dalamnya sehingga mereka terhubung ke promise asli:

public getUserData()
{
    ...

    // return promise from function
    return this.authState.auth.getToken().then(token =>
    {
        this.user.token = token;

        // return promise here to chain to original promise
        return this.userService.update(this.user).then(student =>
        {
            this.user.currentCourseId = student.currentCourseId;
        });
    });
}

// usage
getUserDate().then(() => {
    // values are set here
});