javascript - 一个内部带有promise的函数foo,如何写才能让这个foo函数变成同步
本文介绍了javascript - 一个内部带有promise的函数foo,如何写才能让这个foo函数变成同步的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
最终要解决的问题是,我有一个方法foo,这个函数的内部需要调用一个promise来处理我的数据,这个foo函数的返回值就是promise的then能拿到的值。
伪代码如下:
var p = new Promise((resolve, reject) => {
setTimeout(function() {
resolve(5)
}, 1000)
})
function foo() {
p.then((data) => {
// foo函数要返回这个data
})
return '...' // 返回的是p的then方法中接收到的data
}
// 此处应该输出5
console.log(foo())
- node版本不能超过v6.10.0,async/await没戏。
- 如果是直接返回promise的话,后边牵扯到的代码太多了,还要牵扯到多人协作,暂不考虑。
还能有其他的方法吗? 我感到很绝望。
解决方案
想方便的话可以直接用co
模块 专门把promise转换成同步的
npm co
或者自己封装
co源码去掉注释不到100行
我之前写过一个简单的dome
//模拟co
function co(gen) {
var gen = gen();
var a = gen.next();
a.value.then(function (res) {
gen.next(res);
})
}
//调用
co(function* () {
//模仿异步 延时三秒
var result = yield new Promise(function (resolve, reject) {
setTimeout(function () {
return resolve("我是异步但是同步执行");
}, 3000)
})
console.log(result);//三秒后输出 "我是异步但是同步执行"
})
这篇关于javascript - 一个内部带有promise的函数foo,如何写才能让这个foo函数变成同步的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文