消息在两个功能完成之前发送
Message gets sent before both functions are completed
我正在使用节点的pubchem访问模块。JS机器人检索化合物的某些化学性质,然后将其发送到Telegram。我想组合几个属性并获得CAS标识符,但检索CAS标识符是一个单独的功能(请参阅:http://mmmalik.github.io/pubchem-access/#request)。我试图将两者结合为一条信息,只需将所需的功能放在一起:
case 'prop':
var cas = ""
pubchem
.setName(commandText)
.getCas()
.execute(function(data, status) {
if (status != 1) {
cas = status;
} else {
cas = data
}
});
pubchem
.setName(commandText)
.getProperties(["IUPACName", "MolecularWeight", "MolecularFormula",
"CanonicalSMILES"
])
.execute(function(data) {
msg.answer(
"IUPAC name: " + data.IUPACName + ",'nCAS :" + cas +
",'nMW: " + data.MolecularWeight.toFixed(2) + ",'nFormula: " + data.MolecularFormula +
", 'nSMILES: " + data.CanonicalSMILES);
});
break;
执行此操作时,我得到的是,有时CAS属性尚未找到,而其他属性已找到,因此有时在没有CAS的情况下发送消息。
我可以做些什么来保证只有在检索到所有想要的属性后才能发送消息?
对不起,我在代码布局方面遇到问题
您可以将第二个请求封装在函数中,并在调用execute
的回调函数时调用它
pubchem
.setName(commandText)
.getCas()
.execute(function(data, status) {
var cas = !Object.is(status,1) ? status : data;
doSecondRequest(cas);
});
function doSecondRequest(cas){
pubchem
.setName(commandText)
.getProperties(["IUPACName", "MolecularWeight", "MolecularFormula","CanonicalSMILES"])
.execute(function(data) {
msg.answer(
"IUPAC name: " + data.IUPACName + ",'nCAS :" + cas +
",'nMW: " + data.MolecularWeight.toFixed(2) + ",'nFormula: " + data.MolecularFormula +
", 'nSMILES: " + data.CanonicalSMILES);
});
}
或者使用promises
处理异步调用
var promise = new Promise((resolve) => {
pubchem
.setName(commandText)
.getCas()
.execute((data, status) => {
var cas = !Object.is(status,1) ? status : data;
resolve(cas);
});
};
promise.then((cas) => {
pubchem
.setName(commandText)
.getProperties(["IUPACName", "MolecularWeight", "MolecularFormula","CanonicalSMILES"])
.execute((data) => {
msg.answer(
"IUPAC name: " + data.IUPACName + ",'nCAS :" + cas +
",'nMW: " + data.MolecularWeight.toFixed(2) + ",'nFormula: " + data.MolecularFormula +
", 'nSMILES: " + data.CanonicalSMILES);
});
});
相关文章:
- 两个按钮在初次点击后会触发相同的功能
- 如何将具有相同功能的两个select html标签的两个JS组合在一起
- 如何使用相同的按钮点击两个功能
- 两个功能合二为一 - 计算和提交表单
- 一个按钮中的两个onClick功能,并希望一个接一个地发生一个单击功能
- 消息在两个功能完成之前发送
- 防止两个默认功能发生,并同时触发第三个事件
- 如何将相同的功能应用于两个按钮
- 是否有任何功能可以合并两个JSON数据集并替换旧信息?(节点.JS)
- 如何将中的两个geoJSON功能集合添加到两个层组中
- 用于两个功能的Javascript按钮.提交&单击
- rails上的两个保存按钮的功能略有不同
- 一个ng点击按钮下的两个功能
- 这两个 Angular 控制器之间的功能有什么区别吗?
- 这两个功能有什么区别
- 有一个功能可以将字符串很好地缩短为一个、两个或三个字母
- (飞镖)我希望触发两个不同的onclick功能,具体取决于单击时是否选中了单选按钮.我该怎么做
- 一个 PHP 文件中有两个事件功能
- 组合具有不同初始设置的两个节点服务器的功能
- 如何在jQuery中单击两个按钮之一时执行功能