如何在Messenger中正确使用setTimeout和Promises

时间:2017-06-10 15:33:50

标签: javascript settimeout es6-promise facebook-messenger

我想通过Messenger机器人发送一系列消息,介于两者之间并显示打字效果。目前我有这段代码:

action is None

但是,由于某些原因,不会出现打字效果。我是否需要使用Promises来确保在前一行完成时执行每一行?你能告诉我一个例子吗?

1 个答案:

答案 0 :(得分:-1)

我不确定这将如何与Facebook整合,但是要延迟"打字"效果,您希望在数组中键入字符,然后使用计时器在循环时增加延迟时间。完成此任务不需要承诺。

你需要每个连续的计时器都有一个增加的延迟,因为所有设置的计时器将被#34;堆叠"在事件队列中然后它们将全部快速连续执行,如此快速地创建文本,它将立即显示。您需要确保每个计时器等待的时间比前一个计时器要长。

以下是一个例子:



var out = document.getElementById("output");

var message = "This is the text to type...";

// Turn string into proper array so .forEach can be used
var messageArray = Array.prototype.slice.call(message);

// Set the initial stagger amount between timer calls
var stagger = .5;

messageArray.forEach(function(char){
  setTimeout(function(){
    out.textContent += char;
  }, 250 * (stagger++));  // Each timer will have a longer delay on it than the last one
});

<div id="output"></div>
&#13;
&#13;
&#13;

要使其适应您的Facebook用例,您只需将setTimeout功能的内容替换为对Facebook Messenger机器人的调用,并将单个字符传递给它。