亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Angular 中的問題“Uncaught (in promise) TypeError”

Angular 中的問題“Uncaught (in promise) TypeError”

FFIVE 2023-06-15 09:47:19
我正在嘗試在 Angular 中實現基于 RiveScript 的聊天機器人。聊天機器人工作得很好——我總是在控制臺中得到正確的答案。顯示用戶的輸入也很有效。但是,我總是卡在一點:由于以下錯誤,在聊天 UI 中顯示聊天機器人的答案:ERROR?Error:?Uncaught?(in?promise):?TypeError:?this?is?undefined我真的嘗試了很多東西,但我找不到問題所在。從我的角度來看,這也有點令人困惑,因為我可以在控制臺中獲得正確的聊天機器人消息。如果有人能幫我解決這個問題,我會很高興!這是我的源代碼,所以你可以看到代碼有效。converse(msg: string) {? ? const userMessage = new Message(msg, 'user'); //gettng user message? ? this.update(userMessage);?? ?? ? var bot = new RiveScript({utf8: true}); // initializing bot? ? ?? ? bot.loadFile('/assets/brain/test.rive').then(loading_done); // loading bot brain? ? function loading_done() {? ? ? console.log("Chatbot initialized!");?? ? ? bot.sortReplies();? //sorting replies?? ??? ? ? let username = "user";? ? ??? ? ? return bot.reply(username, msg).then(answer => { //getting chatbot answer? ? ? ? console.log("User: " + msg);? ? ? ? console.log("Chatbot: " + answer);? ? ? ? const result = answer;?? ? ? ? const botMessage = new Message(result, 'bot');??? ? ? ? this.update(botMessage);? ? ? });?? ? }? }
查看完整描述

2 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

嘗試


converse(msg: string) {


    const userMessage = new Message(msg, 'user'); //gettng user message

    this.update(userMessage); 

   

    var bot = new RiveScript({utf8: true}); // initializing bot

     

    const loading_done = (bot) => ()=> {

      console.log("Chatbot initialized!"); 

      bot.sortReplies();  //sorting replies 

    

      let username = "user";

      

      return bot.reply(username, msg).then(answer => { //getting chatbot answer

        console.log("User: " + msg);

        console.log("Chatbot: " + answer);

        const result = answer; 

        const botMessage = new Message(result, 'bot');  

        this.update(botMessage);

      }); 

    } 


  bot.loadFile('/assets/brain/test.rive').then(loading_done(bot)); // loading bot brain


  }

或者


   loading_done(bot){ 

return  ()=> {

const that = this;

      console.log("Chatbot initialized!"); 

      bot.sortReplies();  //sorting replies 

    

      let username = "user";

      

      return bot.reply(username, msg).then(answer => { //getting chatbot answer

        console.log("User: " + msg);

        console.log("Chatbot: " + answer);

        const result = answer; 

        const botMessage = new Message(result, 'bot');  

        that.update(botMessage);

      }); 

    } 

}


converse(msg: string) {


    const userMessage = new Message(msg, 'user'); //gettng user message

    this.update(userMessage); 

   

    var bot = new RiveScript({utf8: true}); // initializing bot

     



  bot.loadFile('/assets/brain/test.rive').then(this.loading_done(bot).bind(this)); // loading bot brain


  }

但我相信第一個解決方案更清楚


查看完整回答
反對 回復 2023-06-15
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

this使用箭頭函數代替定義自己的上下文的函數:


const loading_done = () => {

      console.log("Chatbot initialized!"); 

      bot.sortReplies();  //sorting replies 

    

      let username = "user";

      

      return bot.reply(username, msg).then(answer => { //getting chatbot answer

        console.log("User: " + msg);

        console.log("Chatbot: " + answer);

        const result = answer; 

        const botMessage = new Message(result, 'bot');  

        this.update(botMessage);

      }); 

    }

當您使用打字稿時,您還可以將 loading_done 設為私有函數:


converse(msg: string) {


    const userMessage = new Message(msg, 'user'); //gettng user message

    this.update(userMessage); 

   

    var bot = new RiveScript({utf8: true}); // initializing bot

     

    bot.loadFile('/assets/brain/test.rive').then(this.loadingDone); // loading bot brai

  }


// Use camel case instead of snake case in typescript.

private loadingDone = () => {

      console.log("Chatbot initialized!"); 

      bot.sortReplies();  //sorting replies 

    

      let username = "user";

      

      return bot.reply(username, msg).then(answer => { //getting chatbot answer

        console.log("User: " + msg);

        console.log("Chatbot: " + answer);

        const result = answer; 

        const botMessage = new Message(result, 'bot');  

        this.update(botMessage);

      }); 

}


查看完整回答
反對 回復 2023-06-15
  • 2 回答
  • 0 關注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號