25 lines
562 B
JavaScript
25 lines
562 B
JavaScript
export default function procedure(entity, stanza = null, handler) {
|
|
return new Promise((resolve, reject) => {
|
|
function onError(err) {
|
|
entity.removeListener("nonza", listener);
|
|
reject(err);
|
|
}
|
|
|
|
function done(...args) {
|
|
entity.removeListener("nonza", listener);
|
|
resolve(...args);
|
|
}
|
|
|
|
async function listener(element) {
|
|
try {
|
|
await handler(element, done);
|
|
} catch (err) {
|
|
onError(err);
|
|
}
|
|
}
|
|
|
|
stanza && entity.send(stanza).catch(onError);
|
|
entity.on("nonza", listener);
|
|
});
|
|
}
|