脚本第一次等待响应而没有任何问题,但是此后每次,即使响应的长度不等于> = 2,它也只是连续的。
我目前正在使用运行JavaScript网络服务器的phantomJS脚本,该脚本有时需要用户输入。因此,我使用Slack API发送了一条消息,并使用一个同步的XmlHttpRequest等待用户的答复以接收所请求的值。 (据我所知,由于内置了phantomJS网络服务器,因此没有其他选择)
ts 是松弛的时间戳,就像唯一标识符
响应是网络服务器响应
var slackGetResponse = function(requestTs) {
var xhrResp = new XMLHttpRequest();
xhrResp.onreadystatechange = function() {
if (xhrResp.readyState == XMLHttpRequest.DONE) {
var json = JSON.parse(xhrResp.responseText).messages;
if (json.length >= 2) {
slackSendMsg("OK", true, requestTs);
slackResponse = json[1].text;
return true;
} else {
if (rTo < responseTimout) {
rTo++;
setTimeout(slackGetResponse(requestTs), 2000);
} else {
slackSendMsg('Timeout', true, '');
response.statusCode = 500;
response.setHeader('Content-Type', 'application/json');
response.write(JSON.stringify({
"status": false,
"msg": "timeout"
}));
response.close();
return true;
}
}
}
}
xhrResp.open("GET", "https://slack.com/api/conversations.replies?token=" + token + "&channel=" + channel + "&ts=" + requestTs + "&pretty=1&limit=1", false);
xhrResp.send();
}
发送第一条消息:
var slackSendMsg = function(msg, async, threadTs) {
var xhrMsg = new XMLHttpRequest();
xhrMsg.onreadystatechange = function() {
if (xhrMsg.readyState == XMLHttpRequest.DONE) {
var requestTs = JSON.parse(xhrMsg.responseText).ts;
if (!async) {
return slackGetResponse(requestTs);
}
return true;
}
}
xhrMsg.open("GET", "https://slack.com/api/chat.postMessage?token=" + token + "&channel=" + channel + "&text=" + msg + "&pretty=1&thread_ts=" + threadTs, async);
xhrMsg.send();
};
这是我在执行期间调用方法的方式:
slackSendMsg('Password Error, please provide *Password* for _' + params.name + '_.', false, '');
credentials.password = slackResponse;