Можно ли создать новый объект Promise в Angular 1.7? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть приложение, которое в настоящее время использует Angular 1.7, и у нас есть IHTTPPromise (updateCase), где мы затем обрабатываем код метода then() после его разрешения

Перед первым then() Я хочу соединить еще один then(), чтобы установить период ожидания x миллисекунд

Я не могу использовать setTimeout() только тогда, поскольку это не возвращает Обещание.

In Angular 1.7, как я могу создать новое Обещание, содержащее setTimeout, а затем разрешить и разрешить мне создавать цепочки операторов?

this.caseService.updateCase(updateCaseRequest)
//***WANT TO ADD A WAIT HERE
    .then(
    response => {
        this.showUpdateComplete();
        this.getCases();
        this.$scope.selectedCase = selectedCase;
    })
}

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Используйте службу $ timeout:

this.caseService.updateCase(updateCaseRequest)
.then( response => {
    return this.$timeout( (_ => response) , delay );
}).then( response => {
    this.showUpdateComplete();
    this.getCases();
    this.$scope.selectedCase = selectedCase;
})

Возвращаемое значение вызова $timeout - это обещание, которое будет разрешено, когда пройдет задержка и будет выполнена функция тайм-аута, если она предоставлена.

Для получения дополнительной информации см.

0 голосов
/ 10 марта 2020

Если вам нужно отложить запросы или другие вещи чаще, используя что-то в цепочке then, вы можете использовать следующее:

/** Can be used within a then-chain to delay the next then in the chain ;) */
export const delayPromise = (ms: number, value: any) => new Promise((resolve) => { setTimeout(() => resolve(value), ms); });
this.caseService.updateCase(updateCaseRequest)
    .then(res => delayPromise(res, 1000)) // Wait 1 second
    .then(response => {
            this.showUpdateComplete();
            this.getCases();
            this.$scope.selectedCase = selectedCase;
        }
    );

Редактировать: нельзя использовать в angularjs контекст - см. Комментарии

...