如何将已解决的promise值传递给另一个函数?

时间:2018-02-10 18:17:10

标签: json node.js axios

如何将返回的Promise值传递给另一个函数?我需要检索已解析的JSON数据,然后使用该响应数据发送到Slack通道。

我的index.js

// Get the data
let getData = () => {
    axios.get('https://jsonplaceholder.typicode.com/posts/1').then(res => {
        const responseJSON = res.data
        return responseJSON
    })
    .catch(err => {
        console.log(`Error in getData(): ${err}`)
    })
}

// Post to Slack (real-time)
let slack = () => {
    axios.post('url-to-post-to', {
            'text':  getData().toString() // This has to be a string, but right now it's returning [object Promise]
        })
        .catch(err => {
            console.error(`Error in SLACK: ${err.response.data}`)
        })
}

现在我在Slack频道收到[object Promise],但我需要以{strong>字符串的形式返回的JSON

我认为我正在尝试传递一个尚未解决的值,但问题是,我不知道如何在解析后传递该值。

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

在第一次通话后插入您的Slack来电 thenabled 。你需要这样做,因为正如你所怀疑的那样,你正在使用未履行承诺的结果进行Slack调用。

// Get the data
let getData = () => {
    axios.get('https://jsonplaceholder.typicode.com/posts/1').then(res => {
        const respondeJSON = res.data;
        return responseJSON;
    }).then(data => {
        axios.post('url-to-post-to', {
            'text': data
        })
        .catch(err => {
            console.error(`Error in SLACK: ${err.response.data}`);
        });
    }).catch(err => {
        console.log(`Error in getData(): ${err}`)
    })
};

答案 1 :(得分:1)

使用promises时,如果从函数返回promise,则可以在其上调用then属性,并且解析后的值将通过then参数传递。你可以做到。

// Get the data
let getData = () => {
    return axios.get('https://jsonplaceholder.typicode.com/posts/1').then(res => {
        const respondeJSON = res.data
        return responseJSON
    })
    .catch(err => {
       console.log(`Error in getData(): ${err}`)
    })
}

// Post to Slack (real-time)
let slack = () => {
    getData().then(data => 
    axios.post('url-to-post-to', {
           'text':  data.toString() 
         })
    .catch(err => {
        console.error(`Error in SLACK: ${err.response.data}`)
    }))
}

// Get the data
let getData = () => {
    return axios.get('https://jsonplaceholder.typicode.com/posts/1').then(res => {
        const respondeJSON = res.data
        return responseJSON
    })
    .catch(err => {
       console.log(`Error in getData(): ${err}`)
    })
}

// Post to Slack (real-time)
let slack = (data) => {
    axios.post('url-to-post-to', {
           'text':  data.toString() 
         })
    .catch(err => {
        console.error(`Error in SLACK: ${err.response.data}`)
    }))
}

getData().then(slack);

答案 2 :(得分:0)

您可以将功能包裹在async-await

let slack = async () => {
    axios.post('url-to-post-to', {
            'text':  await getData().toString()
        })
        .catch(err => {
            console.error(`Error in SLACK: ${err.response.data}`)
        })
}