请问,如何返回函数中的promise的值

kzddck
  • 2
新手上路,请多包涵

以前的提问

app.get('/', (req, res) => {
    function fn() {
        return new Promise(function (resolve, reject) {
            let value = 123;
            if (true) {
                resolve(value);
            } else {
                reject(error);
            }
        })
        .then(value => {
            return value
        });
    }
    console.log(fn1()); //这里的打印结果为promise
      
    res.send(fn1()); //这里返回结果为{}
     //预期想取得的值为value(123)
})

在大佬们的指导下,终于理解了,现在的解决方法,这里的axios本身就是一个promise

const axios = require('axios')
var url = 'http://baidu.com'
function getdata(url) {
    return axios.get(url).then(res=>{
        return res.data
 })
}
// 通过async/await去操作得到的对Promise象,也就是说,要想获取到Promise.then的返回值,就必须利用await获取,要想使用await,就必须在函数前面加上async
async function run() {
    result = await getdata(url)
    console.log(result)
}
run()
回复
阅读 940
3 个回答
✓ 已被采纳
app.get('/', (req, res) => {
    function fn() {
        return new Promise(function (resolve, reject) {
            let value = 123;
            if (true) {
                resolve(value);
            } else {
                reject(error);
            }
        })
        .then(value => {
            return value
        });
    }
    console.log(fn1()); //这里的打印结果为promise
     //res.send(fn1()); //这里返回结果为{}
     
     fn1().then(v=>res.send(v))//得这样写
     //预期想取得的值为value(123)
})

promise 是异步的,所以你得在 then 里面去使用

app.get('/', (req, res) => {
    function fn() {
        return new Promise(function (resolve, reject) {
            let value = 123;
            if (true) {
                resolve(value);
            } else {
                reject(error);
            }
        })
        .then(value => {
            // 应该在这里打印, 并且在这里 send
            // 可以保证打印出来的是 123,send 出去的也是 123,
            // 但恕我直言,这个 Promise 犹如脱裤子 fart —— 多此一举
            // 耐心等待,应该会有其他好心的答主详述 Promise 的正确用法
            // 甚至会引入 `async/await`
            console.log(value);
            return value
        });
        
        fn();
    }
})
app.get('/', async(req, res) => {
    let value = 
        await new Promise(function (resolve, reject) {
            let value = 123;
            if (true) {
                resolve(value);
            } else {
                reject(error);
            }
        })
        .then(value => {
            return value
        });
    console.log(value); 
    res.send(value); 
})
你知道吗?

宣传栏