javascript - 从函数返回变量和承诺
问题描述
考虑以下使用回调编写的函数。它返回一个令牌并异步执行一个方法。
var token = 1;
function requestSupport(callback) {
setTimeout(() => {
console.log(token + ":How may I help you?");
callback(); //when executive is available
}, 5000);
return ++token; //instantly give the token number
}
回调的简单之处在于该函数能够(立即)返回令牌编号,并且还可以异步执行代码并在有帮助时通知。尝试使用 Promises 重写时,这个函数应该是什么样子?问题:如果一个函数返回一个承诺,用户将不会获得令牌编号,因为函数可以返回一件事。
解决方案
你想返回 token 和 Promise - 你可以用任何你想要的数据结构来做到这一点,也许是一个对象:
var token = 1;
function requestSupportProm() {
const prom = new Promise((resolve) => {
setTimeout(() => {
console.log(token + ":How may I help you?");
resolve(); //when executive is available
}, 2000);
});
return {
prom,
token: ++token
};
}
(() => {
// later;
const { prom, token } = requestSupportProm();
console.log('Got token:', token);
prom.then(() => {
console.log('Promise resolved');
});
})();
也可以使用数组,例如return [prom, ++token]
,但是具有命名属性的对象可能一目了然更容易理解。
推荐阅读
- swift - NSTableView 不会调用 viewForTableColumn
- python - 如何用这个“hello='23'”代替这个“hello=\'23\'”
- python - 仅当 Python 模块被导入时才重写它
- javascript - 在我的 d3 美国地图可视化中向每个州添加圆圈
- ios - 无法从 iOS swift 中的 firebase 视频 url 生成视频缩略图?
- python - Problem with 'while' loop and list index in Python
- progress-4gl - 如果不匹配,则从 abl 返回错误字符串
- android - 如果我通过短信意图发送短信,如何知道短信是否已发送
- r - 如何在 R Studio 中的 2 个数据集之间使用过滤函数?
- scala - 在 Scala Spark 程序中的过滤方法中获取编译时错误