«Ответ не был установлен. Используется ли это в асинхронном вызове, который не был возвращен как обещание обработчику намерений?» используя JS - PullRequest
0 голосов
/ 27 августа 2018

это код, который генерирует ошибку, полный ответ, сгенерированный этим намерением при вызове, является "ответ не был установлен. Используется ли это в асинхронном вызове, который не был возвращен как обещание обработчику намерений" ?» что я должен сделать, чтобы исправить это?

app.intent('getCrypto', (conv,{crypto="ethereum",cryptoactions="price"}) =>{
     fetch('https://api.coinmarketcap.com/v1/ticker/').then(response => {
       return response.json();
     }).then(data => {
          for (let i = 0; i < data.length - 1; i++) {
            if (data[i].id === "bitcoin")
               conv.data.price=data[i].price_usd;
               conv.ask(`${conv.data.price} is the current value of ${crypto}`);
               return response.json();
          }

     }).catch(err => {
          return conv.ask(`${cryptoactions} of ${crypto} is not available. Would you like to know about another one?`);
     });
});

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Чтобы избежать этой проблемы в Dialogflow API версии 2 ,

Вы должны return Promise, вы бы предпочли использовать эти структуры?

app.intent('getCrypto', conv => {
    // I - MUST HAVE PROMISE IN HERE
    return new Promise(function (resolve, reject) {
        fetch('https://api.coinmarketcap.com/v1/ticker/')
            .then(res => {
                ...

                resolve();
            })
            .catch(error => {
                console.log(error);

                reject(error)
            });
    })
    .then(function (result) {
        console.log(result);

        // II - MUST HAVE THIS RESPONSE
        // conv.ask(new SimpleResponse("..."));
        conv.close(new SimpleResponse(texts.goodbye));
    }, function (error) {

    });
})
0 голосов
/ 28 августа 2018

Сообщение об ошибке описывает точную проблему «Используется ли это в асинхронном вызове, который не был возвращен как обещание обработчику намерений?»

Вы должны вернуть асинхронный вызов из вашего обработчика намерений. Таким образом, добавление return прямо перед вашим звонком на fetch должно решить проблему.

...