将可多次调用的Javascript回调转换为promise
Convert Javascript callback which can be called multiple times into promise
有没有办法将可以多次调用的带回调的 Javascript 调用转换为 Promise?
说,
scan(function(result) {
// this is actually a Bluetooth device scan (Cordova), and
// will return something when a device is found.
// So this can be called more than once.
});
并将其包装成承诺?
function scanP {
return new Promise(function(resolve, reject) {
scan(function (result) {
resolve(result); // attempt to call repeatedly, but doesn't work.
});
});
}
scanP(function(result) {
// check if this device is what we want.
})
.catch(function(err) {
// handle error
});
我也需要这个模式来订阅来自蓝牙设备的数据。 promise 不适合这个任务吗?
编辑:我正在使用 Bluebird。
Promise 只解决一次。如果想多次解决它,那么你想要的不是承诺。
您可能需要自定义事件(在浏览器中),Node 的 EventEmitter
或 Stream
(继承 EventEmitter
,具有 .pipe
,可选缓冲)。如果您想要的只是一个回调链解决方案,那么编写您自己的解决方案似乎并不难。
有没有办法将可以多次调用的带回调的 Javascript 调用转换为 Promise?
说,
scan(function(result) {
// this is actually a Bluetooth device scan (Cordova), and
// will return something when a device is found.
// So this can be called more than once.
});
并将其包装成承诺?
function scanP {
return new Promise(function(resolve, reject) {
scan(function (result) {
resolve(result); // attempt to call repeatedly, but doesn't work.
});
});
}
scanP(function(result) {
// check if this device is what we want.
})
.catch(function(err) {
// handle error
});
我也需要这个模式来订阅来自蓝牙设备的数据。 promise 不适合这个任务吗?
编辑:我正在使用 Bluebird。
Promise 只解决一次。如果想多次解决它,那么你想要的不是承诺。
您可能需要自定义事件(在浏览器中),Node 的 EventEmitter
或 Stream
(继承 EventEmitter
,具有 .pipe
,可选缓冲)。如果您想要的只是一个回调链解决方案,那么编写您自己的解决方案似乎并不难。