Обещание не выполнять тогда снаружи, но оно внутри функции - PullRequest
0 голосов
/ 12 июня 2018

Я использую обещание отправить асинхронное действие в реакции.Я просто хочу изменить свойства объекта.Функция работает.Если я заключаю код в обещание и после выполнения Promise().then работает, но если я выполняю myFunction(params).then(), then is not called - вот моя функция.(Рекурсивно):

export function setValue(propertyPath, value, obj) {
  console.log("setting the value")
  return new Promise((resolve, reject) => {
      // this is a super simple parsing, you will want to make this more complex to handle correctly any path
      // it will split by the dots at first and then simply pass along the array (on next iterations)
      let properties = Array.isArray(propertyPath) ? propertyPath : propertyPath.split(".")

      // Not yet at the last property so keep digging
      if (properties.length > 1) {
        // The property doesn't exists OR is not an object (and so we overwrite it) so we create it
        if (!obj.hasOwnProperty(properties[0]) || typeof obj[properties[0]] !== "object") obj[properties[0]] = {}
        // We iterate.
        return setValue(properties.slice(1), value, obj[properties[0]])
        // This is the last property - the one where to set the value
      } else {
        // We set the value to the last property
        obj[properties[0]] = value
        console.log("modified object")
        console.log(obj)
        return resolve(obj)
      }
    }
  )
}

export function performPocoChange(propertyPath, value, obj) {
  console.log("we are indeed here")
  return (dispatch) => {
    setValue(propertyPath, value, obj).then((poco) => {
      console.log("poco is here")
      console.log(poco)
      dispatch(changePoco(poco))
    })
  }
}

консоль показывает «мы действительно здесь», но не «Poco is here», и changePoco (то есть действие) не вызывается.Однако, если я сделаю then сразу после скобок обещаний и журнала, он покажет журнал.

Я не эксперт в JS.Я очень стараюсь, и это действительно получило меня.Есть идеи?

Большое спасибо заранее

1 Ответ

0 голосов
/ 13 июня 2018

Вы не resolve обещаете, кроме else, поэтому выполнение не выполняется.

...