typescript - Bu yöntemde bir Promise nasıl döndürülür


Benim şöyle bir Typescript metodum var ve bunun bir Promise döndürmesini istiyorum, ama sadece this.user.currentCourseId=student.currentCourseId; satırı çalıştıktan sonra.

Bu mümkün mü?

public getUserData()
{
    ...

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

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

Cevap #1

jfriend'in belirttiği gibi, bir sözü (promise) bitene kadar geri dönmesini bekleyemezsiniz. Bu atı arabadan önce koşmak olur. Sözü hemen geri döndürürsünüz ve tamamlanmasını beklemek için onun üzerinden zincirleme yaparsınız.

Sadece belirtmek isterim ki, "kıyamet kulesi"ne kayma alışkanlığından kaçınmak için promise zincirlemesinden yararlanmalısınız:

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
});

Cevap #2

Sözleşmeyi hemen geri döndürürsünüz. Ve, ilk .then() işleyicisinin içindeki diğer tüm sözleşmeler de onun içinde geri döndürülür, böylece orijinal sözleşmeye zincirlenirler:

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
});