0

我正在尝试调用 Clarifai 的颜色 API 来接收图像中的不同颜色。但是,我在调用 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;
}
4

1 回答 1

1

呼叫是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
});
于 2018-11-05T08:59:26.447 回答