如何通过 Promise 获取回调函数中的数据? 这可能吗?
这是我的代码:
var bricklets = [];
var ipcon = new Tinkerforge.IPConnection();
pcon.on(Tinkerforge.IPConnection.CALLBACK_ENUMERATE, function(uid, connectedUid, position, hardwareVersion, firmwareVersion, deviceIdentifier, enumerationType) {
if (enumerationType === Tinkerforge.IPConnection.ENUMERATION_TYPE_DISCONNECTED) {
console.log('');
return;
}
bricklets.push(new Bricklet(uid, deviceIdentifier, connectedUid));
});
我知道这个解决方案行不通,但我不知道如何通过 Promise 获取函数外部的数据。
最佳答案
由于你的回调被回调了多次,所以比 promisifying your API 稍微复杂一些。通过将 resolve
/reject
作为回调传递给您的方法。
最后一次调用后,您将使用结果数组调用 resolve
:
var promise = new Promise(function(resolve, reject) {
var bricklets = [];
var ipcon = new Tinkerforge.IPConnection();
pcon.on(Tinkerforge.IPConnection.CALLBACK_ENUMERATE, function(uid, connectedUid, position, hardwareVersion, firmwareVersion, deviceIdentifier, enumerationType) {
if (enumerationType === Tinkerforge.IPConnection.ENUMERATION_TYPE_DISCONNECTED) {
return resolve(bricklets); // when done
// ^^^^^^^
} // else if some error happened
// return reject(err);
bricklets.push(new Bricklet(uid, deviceIdentifier, connectedUid));
});
});
现在,您并没有真正从“回调中”获取数据,因为它们会同步返回( promises are still async callbacks ),但您会得到一个 promise
数据比使用回调更容易使用。
你可能会像这样消费它
promise.then(function(bricklets) {
console.log(bricklets);
… // do more
}); // returns a new promise for the result of "do more"
关于Javascript 从回调中获取 Promise 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30060864/