JavaScript/TypeScript - zamiana funkcji z callback na zwykłą

0

Chcę zamienić taką funkcję:

funkcja(callback): void {
this.zewnetrznaKlasa.funkcja("param1", "param2", function (result) {
if (result.error) {
callback(false);
}
else {
callback(true);
}
});
}

na funkcję, która nie przyjmuje parametru callback tylko zwraca true/false, tak aby można było z niej skorzystać w następujący sposób:

innFunkcja() {
let result = this.funkcja(); // true/false
}

Nie mogę zrobić zmian w zewnetrznaKlasa.funkcja (jest to funkcja asynchroniczna). Jak kto przerobić z użyciem Promise?

0

Coś takiego powinno pomóc:

// Some fake object with async method, not important:
const someObject = {
  foo(a, b, callback) {
    setTimeout(() => {
      callback({
        error: false
      })
    }, 0)
  }
}

// Solution:
class Example {
  constructor(someObject) {
    this.someObject = someObject
  }
  
  bar() {
    return new Promise(resolve => {
      this.someObject.foo("param1", "param2", resolve)
    })
      .then(result => !result.error)
  }
  
  baz() {
    const result = this.bar()
    
    result.then(console.log)
  }
}

// Usage:
const example = new Example(someObject)
example.baz() // => prints " true"

CodePen: https://codepen.io/caderek/pen/YEeGLW?editors=0012

Lub wersja z async-await:

class Example {
  constructor(someObject) {
    this.someObject = someObject
  }
  
  async bar() {
    const result = await new Promise(resolve => {
      this.someObject.foo("param1", "param2", resolve)
    })
    
    return !result.error
  }
  
  async baz() {
    const result = await this.bar()
    
    console.log(result)
  }
}

CodePen: https://codepen.io/caderek/pen/ooEYxZ?editors=0012

1 użytkowników online, w tym zalogowanych: 0, gości: 1