Как решить ошибку обещания запроса Arango?

Я пытался получить результат запроса от Arangodb к моему внешнему сервису (Angular 4), используя мыльное сообщение. Я могу получить результат запроса, но распечатанный в console.log. Но как я могу получить его под эту функцию (Сервис).

Чтобы я мог передать сообщение мыла:

var soap_msg = '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:examples:CheckUserNameService">' +
  '<soapenv:Header/>' +
  '<soapenv:Body>' +
  '<urn:CheckUserNameResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
  '<status xsi:type="xsd:string">' + (Service) + '</status>' +
  '</urn:CheckUserNameResponse>' +
  '</soapenv:Body>' +
  '</soapenv:Envelope>';

Я опубликовал эту проблему, получил ответ, в котором говорилось, что нужно использовать await или .this(), затем я обновил свой код, но ошибка все еще остается.

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

var payload = [null,"192.168.72.237"];

работает нормально. Проблема с запросом

var Service = db.query(aqlQuery `
             LET startVertex = (FOR doc IN spec
             FILTER doc.serial_no == '"123456abcde"'
             LIMIT 2
             RETURN doc
             )[0]

            FOR v IN 1 ANY startVertex belongs_to
            RETURN v.ip`, {
  bindVar1: 'value',
  bindVar2: 'value',
}).then(function(res) {
  console.log("doc" + res._result);
})

Версии

  • "узел": "8.9.4"
  • "арангойс": "^5.8.0",
  • "экспресс": "^4.16.2",
  • "экспресс-генератор": "^4.15.5"

У меня нет ни малейшего понятия, как взять его отсюда.

введите здесь описание изображения


person cantona_7    schedule 24.02.2018    source источник
comment
Просто чтобы подтвердить, doc.serial_no, который вы ищете, имеет двойные кавычки внутри одинарных кавычек, а это означает, что ключ serial_no должен иметь значение "123456abcde" с двойными кавычками в нем. Не забудьте удалить двойные кавычки, если их там нет.   -  person David Thomas    schedule 26.02.2018
comment
Вы даже не разместили соответствующий код. Проблема по-прежнему в том, что Service является обещанием, и как вы используете значение Service в другом месте.   -  person Bergi    schedule 26.02.2018
comment
@DavidThomas нет, но запрос работает нормально. Это проблематично, когда служба загружается в мыльное сообщение.   -  person cantona_7    schedule 26.02.2018
comment
@Bergi Я использую служебное значение в soap_msg, упомянутом выше. Я отправляю soap_msg на angular4   -  person cantona_7    schedule 26.02.2018
comment
Да, и вы не можете просто поместить объект обещания в эту строку. Вам нужно дождаться промиса, а затем соединить его результат со строкой, чтобы создать мыльное сообщение.   -  person Bergi    schedule 26.02.2018
comment
@Bergi Берги, я не знал, как это сделать? Вы можете провести меня через это?   -  person cantona_7    schedule 26.02.2018
comment
@yuvii_10 Я добавил пример ниже, посмотрите, как он у вас получится.   -  person David Thomas    schedule 26.02.2018
comment
Как я уже говорил вам ранее, вопрос о попрошайничестве, вероятно, написан в спешке, а вопросы, написанные в спешке, редко бывают хорошими вопросами. Обратите внимание, что читателям все равно, как долго вы застряли, а то, что вы застряли на долгое время, не делает (и не должно) придавать вашему вопросу приоритет. Добровольцы ответят на вопросы, которые им нравятся, и сделают это на досуге.   -  person halfer    schedule 27.02.2018
comment
Кроме того, если бы вы могли воздержаться от добавления умоляющих заявлений, таких как «Пожалуйста, помогите мне», ко всем вашим материалам, это было бы признательно. Читатели не хотят, чтобы вы клянчили и просили милостыню перед сообществом — делайте свои вопросы краткими, подробными, хорошо проработанными и уникальными, и вы добьетесь большего успеха.   -  person halfer    schedule 27.02.2018
comment
@halfer да, я последовал вашему совету и правильно формулировал свои вопросы ... я буду избегать этих комментариев в будущем. Спасибо, что сообщили мне :)   -  person cantona_7    schedule 28.02.2018


Ответы (1)


Чтобы обещание разрешилось для вас, необходимо вызвать функцию .all курсора, чтобы она вернула значения.

На этом сайте есть хороший пример, это просто:

db.query('FOR doc IN documents RETURN doc')
  .then((cursor) => { return cursor.all() })
  .then((doc) => { console.log(doc) });

Обещание, возвращенное первым шагом, затем вызывается для извлечения записей, а возврат курсора — это документы, которые вы ищете.

e.g.

var Service = db.query(aqlQuery `
             LET startVertex = (FOR doc IN spec
             FILTER doc.serial_no == '"123456abcde"'
             LIMIT 2
             RETURN doc
             )[0]

            FOR v IN 1 ANY startVertex belongs_to
            RETURN v.ip`, {
  bindVar1: 'value',
  bindVar2: 'value',
}).then(function(cursor) { // Add this to return the documents in the promise
     return cursor.all()  
}).then(function(res) {
  console.log("doc" + res._result);
})
person David Thomas    schedule 26.02.2018