我有返回数据的承诺,我想将其保存在变量中。由于异步性质,这在 JavaScript 中是不可能的吗?我是否需要使用 onResolve
作为回调?
我能以某种方式使用它吗(例如用 async/await 包装它):
const { foo, bar } = Promise.then(result => result.data, errorHandler);
// rest of script
而不是这个?
Promise.then(result => {
const { foo, bar } = result.data;
// rest of script
}, errorHandler);
注意:使用 Bluebird 库而不是本机实现,我不能从 Promise 更改为 asnyc/await 或 Generators。
原文由 Tobias Mühl 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,您不能像您在示例中建议的那样从承诺中 同步 获取数据。数据必须在回调函数中使用。或者,在函数式编程风格中,promise 数据可以被 map()ed over 。
如果您可以使用 async/await (您应该觉得它很棒),那么您可以编写看起来同步但又保留 promise 异步性的代码(请参阅@loganfsmyth 评论)。
总的来说,因为您已经在使用 ES6,所以我假设您也在使用转译器。在这种情况下,您绝对应该尝试使用 async/await 。请务必权衡今天它们尚未成为批准规范的决定。