我正在使用另一个库(THREE.js),它为其几个加载器使用单值回调。我想在Promise中调用它们并将值传递给链。
我已经从前一个方法中得到了一个承诺,所以我想继续这个链。这给了我类似的东西:
var callStuff = (input, callback) => {
// open some files and create some buffers
// callback with buffer handles
setTimeout(callback, 1000, input + 2);
};
new Promise((resolve, reject) => {
resolve(1);
}).then(result => {
callStuff(result, value => {
console.log("callback:", value);
return value;
});
}).then(newResult => {
console.log("newResult: ", newResult);
return newResult;
});

请注意,这是一个简化版本,所以我可以把它放在这里。
如何从回调中获取返回值newResult
?
我知道我可以使用类似[Bluebird''sCallback] [1]的内容,但是我必须catch
来获取我想要的数据,因为这些库不能使用节点样式回调。有没有办法获得我想要的回报值?
谢谢!
更新:我确实找到了一个解决方法,将回调包装在new Promise
中,然后resolve
在回调中,但这感觉就像是作弊。如果可能的话,我希望找到一种更好/更合乎逻辑的方式。
var callStuff = (input, callback) => {
// open some files and create some buffers
// callback with buffer handles
setTimeout(callback, 1000, input + 2);
};
new Promise((resolve, reject) => {
resolve(1);
}).then(result => {
return new Promise((resolve, reject) => {
callStuff(result, value => {
console.log("callback:", value);
resolve( value );
});
});
}).then(newResult => {
console.log("newResult: ", newResult);
return newResult;
});

更新2:只是为了澄清,我无法编辑执行回调的函数(回调?),因为它是一个库,我宁愿通过代码进行更改。
答案 0 :(得分:0)
在回调中做回报吗?
new Promise((resolve, reject) => {
resolve(5);
}).then(result => {
let retVal;
return callStuff(value => {
console.log(value + result);
return retVal = value + result;
}).then(() => retVal);
}).then(newResult => {
console.log(newResult);
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.4.0/bluebird.js"></script>
&#13;