Ошибка объекта Clarifai при попытке вызвать «model.predict» в Angular - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь вызвать API цвета Clarifai для получения разных цветов на изображении. Однако у меня возникают некоторые трудности с вызовом API, поскольку я всегда получаю пустые объекты обратно.

Этот код используется для вызова API:

private app;

obj: RootObject ;

constructor(private _http: HttpClient) {
    this.app = new Clarifai.App({
        ApiKey: "CENSOR BAR"
    });
};

public getColorValues(imageUrl: string): RootObject {
    this.app.models.predict('eeed0b6733a644cea07cf4c60f87ebb7', imageUrl).then(
        function (response) {
            this.obj = response;
        },
        function (error) {
            this.obj = "There was an error";
        }
    );
    let i: number;
    while (this.obj == null) {
        i += 1;
    }
    console.log("Waited " + i + " cycles for response.")
    console.log("Object: " + this.obj);
    return this.obj;
}

1 Ответ

0 голосов
/ 05 ноября 2018

Вызов async, но вы обрабатываете его как синхронизирующий вызов. Возвращенный this.obj не был установлен при возврате.

Кроме того, он вообще не будет установлен, потому что вы используете ключевое слово function, которое изменяет ссылку this на локальную функцию

Ваш getColorValues может вернуть только Promise<RootObject>:

getColorValues(imageUrl: string): Promise<RootObject> {
  return this.app.models.predict('eeed0b6733a644cea07cf4c60f87ebb7', imageUrl);
}

И это все, это все, что вам нужно. Когда вы звоните по номеру getColorValues, обязательно звоните так:

getColorValues(imageUrl).then((resp) => {
  this.obj = resp;
  // this.obj contains what you want
});
...