我正在试图弄清楚如何在我正在编写的测试中使用promises。我在浏览器中使用普通的本机承诺。没有图书馆(还)
测试需要与服务器异步通信,我通过回调获得服务器响应
我有一个服务器对象,我在其中注册回调:
server.onresponse = function(data){
//do stuff with data
}
测试需要向服务器发送一系列命令,这些命令会根据服务器响应进行更改。我将命令发送到服务器,如此
server.sendCommand({data:"do something"})
根据命令,服务器将引发响应回调。我需要读取服务器发送的数据来决定下一个命令应该是什么。
互动应该是
我想使用promises来使这种交互更清晰。就像一系列.then()
s。
我意识到承诺无法重复使用,因此我不能在每次响应回调发生时重置相同的承诺。
有没有办法通过承诺来做到这一点?我也开始读出发电机。那些人也会帮忙吗?
由于
答案 0 :(得分:1)
你可以这样:
cur.execute("UPDATE online_booking SET st1 = (%s) HAVING max(ID) and phone = (%s)", (st1, phone))
并像这样使用它:
function sendCommand(data) {
return new Promise(function(resolve,reject) {
server.onresponse = resolve;
server.sendCommand(data);
});
}
答案 1 :(得分:0)
您可以编写辅助函数来执行您所描述的操作。传入命令,它返回一个Promise
,它将根据服务器的响应进行解析。如果有一些错误处理回调,你也应该使用它。例如,我们称之为server.onerror
。你应该用适当的处理程序替换它。
function sendCommand(cmd) {
const promise = new Promise((resolve, reject) => {
server.onresponse = resolve;
server.onerror = reject;
});
server.sendCommand(cmd);
return promise;
}
你会像你描述的那样使用它,一个承诺链。当然,您可能希望对响应执行某些操作,而不是仅仅触发下一个命令。并且始终记得使用catch
来处理任何错误!
sendCommand({data: "do thing 1"})
.then((response) => sendCommand({data: "do thing 2"}))
.then((response) => sendCommand({data: "do thing 3"}))
.then((response) => console.log("All done!"))
.catch((error) => console.log("Oops!"));