alexbuki
@alexbuki
программист js

Как найти ошибку?

Необходимо переписать места c callback в api на промисы.

const api = {  
  a: {  
    b: {  
      c: callback => setTimeout(() => callback(null, ’hello’), 100)  
    }  
  },  
  aa: {  
    bb: (callback, x, y) => setTimeout(() => callback(null, x + y), 200)  
  }  
};

const promisedApi = promisify(api);  
promisedApi.a.b.c()  
  .then(res => console.log(res)); // => ’hello’


У меня получилось так:
function promisify (api) {
  const promisedApi = {}
  for (const prop in api) {
    if (typeof (api[prop]) === 'function') {
      promisedApi[prop] = new Promise((resolve, reject) => {
        api[prop]((err, script) => {
          if (err) reject(err)
          else resolve(script)
        })
      })
    } else if (Object.keys(api[prop]).length > 0) {
      promisedApi[prop] = promisify(api[prop])
    } else {
      promisedApi[prop] = api[prop]
    }
  }
  return promisedApi
};


Помогите найти ошибку
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
alexbuki
@alexbuki Автор вопроса
программист js
разобрался:
должно быть так:
function promisify (api) {
  const promisedApi = {}
  for (const prop in api) {
    if (typeof (api[prop]) === 'function') {
      let loadScriptPromise = function (src) {
        return new Promise((resolve, reject) => {
          api[prop]((err, script) => {
            if (err) reject(err)
            else resolve(script);
          }, src);
        })
      }
      promisedApi[prop] = loadScriptPromise
    } else if (Object.keys(api[prop]).length > 0) {
      promisedApi[prop] = promisify(api[prop])
    } else {
      promisedApi[prop] = api[prop]
    }
  }
  return promisedApi
};


только теперь не могу понять как вызвать reject
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы