javascript - 一个内部带有promise的函数foo,如何写才能让这个foo函数变成同步

查看:125
本文介绍了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())

  1. node版本不能超过v6.10.0,async/await没戏。
  2. 如果是直接返回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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆