【问题标题】:Angular 2 how to resolve promise manually?Angular 2如何手动解决承诺?
【发布时间】:2016-06-30 14:57:01
【问题描述】:

如何在指令中解决 Angular 2 中的承诺?我正在尝试做一个简单的图像加载指令:

@Directive({
    selector: '[carouselImage]',
    host: {
        '(load)' : 'onImageLoad()'
    }
})
class CarouselImageDirective {
    private _promise: Promise;
    private _loaded: boolean = false;

    constructor(private _elRef: ElementRef, private _renderer: Renderer) {

    }

    loadImage() {
        this._promise = new Promise<ElementRef>( resolve => {
            resolve(this._elRef);
        });

    }

    onImageLoad() {
        this._promise.resolve(); //this won't work
        this._loaded = true;
        console.log('Image loaded ', this._elRef);
    }
}

到目前为止,我的尝试没有奏效。

【问题讨论】:

  • 你试过Promise.resolve(this._promise);吗?
  • @echonax 不工作
  • 你想做什么?你不解决承诺,他们解决他们自己。
  • @dfsq 承诺不会自行解决,总有一个点可以解决它们。我正在尝试做一个简单的图像加载器,检测图像何时加载。有什么想法/最佳实践吗?
  • 我知道 Promise 是如何工作的。我的措辞很糟糕,无论如何很高兴你找到了解决方案。虽然还不是很清楚你在指令中需要这个 promise 做什么,但我的意思是你已经有了 onload 事件。

标签: javascript typescript angular promise


【解决方案1】:

你可以试试这样的:

loadImage() {
    this._promise = new Promise<ElementRef>( resolve => {
        this.resolve = resolve;
    });

}

onImageLoad() {
    this.resolve(this._elRef);
    this._loaded = true;
    console.log('Image loaded ', this._elRef);
}

【讨论】:

  • 这很好用,虽然我更喜欢 echonax 解决方案。谢谢
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 2016-12-25
  • 2017-06-04
  • 2015-12-06
  • 2020-09-07
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多