Как и в случае с обещаниями, обычный способ возврата нескольких значений состоит в том, чтобы либо поместить их в массив, либо разрешить с помощью массива, либо поместить их в объект и разрешить с объектом (как вы это сделали). Я не знаю, почему именно вы недовольны:
resolve({body: body, response: response})
как типичный способ решить обещание с несколькими именованных значений. В ES6, можно даже сократить его:
resolve({body, response})
который только синтаксис ярлык для того же определения объекта.
С обычной оговоркой, чтобы быть осторожным, чтобы избежать конфликтов имен свойства со стандартными свойствами или свойствами любого другой кода может быть с помощью, вы можете добавить свои собственные свойства для response
объекта. Этот объект живет только на время этого конкретного ответа, поэтому любые свойства, которые вы добавляете к нему, будут временными только для продолжительности этой обработки ответа.
Таким образом, ваш второй вариант прекрасно подходит тоже:
response.body = body
resolve(response);
Что касается будущего доказательства, используя свой собственный объект является самым на будущее, так как это ваш объект. Никто никогда не будет изменять его, и нет шансов на столкновение имен с этим первым вариантом.
Что касается добавления свойств объекта response
, то не существует согласованного соглашения о том, как добавлять настраиваемые свойства к объекту ответа, который никогда не будет мешать будущему дизайну и эволюции объекта.Вероятно, вы безопасны, если добавить свой собственный префикс к названию свойства, например response._my_body
, если вы действительно хотите пойти таким образом, чтобы увеличить ваши шансы быть в безопасности. Вы даже можете использовать локально сгенерированный символ ES6 в качестве имени свойства и быть на 100% уверенным в отсутствии столкновения, хотя это делает код немного более уродливым.
Лично я просто разрешаю свой объект или составляю свой собственный префикс имени пользовательского свойства.
Недовольны, потому что не хотят обрабатывать несколько объектов, пытаясь разобрать что-то, что является будущим доказательством с объектом 'response' и приемлемым. – user2727195
@ user2727195 - Разрешение с помощью собственного пользовательского объекта является будущим доказательством, поскольку вы не добавляете какие-либо настраиваемые свойства в объект ответа, который потенциально может повлиять на будущий дизайн и эволюцию этого объекта. Вы просто решаете свой собственный объект, у которого есть два свойства - это абсолютно безопасно сейчас и навсегда. – jfriend00
@ user2727195 - Согласованного соглашения о том, как добавить пользовательские свойства к объекту ответа, не будет согласовано, что никогда не будет мешать будущему дизайну и эволюции объекта. Вероятно, вы безопасны, если добавить свой собственный префикс к имени свойства, например 'response._my_body', если вы действительно хотите пойти таким образом, чтобы увеличить ваши шансы быть в безопасности. Вы даже можете использовать локально сгенерированный символ ES6 как имя свойства и быть на 100% уверенным в отсутствии столкновения. – jfriend00