鍍金池/ 問(wèn)答/Linux  HTML/ 關(guān)于異步獲取數(shù)據(jù)后,如何return到最外層函數(shù)?

關(guān)于異步獲取數(shù)據(jù)后,如何return到最外層函數(shù)?

在開發(fā)小程序時(shí),需定義一個(gè)轉(zhuǎn)發(fā)事件,將{path: shareId,}返回給最外層函數(shù)onShareAppMessage,代碼如下:

const onShareAppMessage = (para) => {
    let shareId;
    wx.request({
        url: 'https://xxx/xxx.php',
        data: {para:para},
        success: function (res) {
            shareId = res.data.shareId
        }
    })
    return {
        path: shareId,
    }
}

其中,wx.request就跟$.ajax差不多,但是只能異步獲取數(shù)據(jù),不能同步,所以return回去的對(duì)象{path: shareId}中shareId是undefined。如果將return寫在sunccess里,能保證shareId正確賦值,但是不能將對(duì)象返回到外層的onShareAppMessage了。請(qǐng)問(wèn)此問(wèn)題該如何解決?

首先感謝各位的回答,可能我沒(méi)表達(dá)清楚我的問(wèn)題。我是要將異步的數(shù)據(jù)return給外層的函數(shù),不是用promise改變代碼格式!

回答
編輯回答
懷中人

不知Promise可否?
或者return wx.request()

2017年1月23日 05:12
編輯回答
凹凸曼

你這個(gè)想法 異步請(qǐng)求的直接跟你說(shuō)做不到(建議你好好去熟悉一下異步請(qǐng)求知識(shí)) 。要么用像上面他們回答說(shuō)的,用回調(diào),要么用Promise 就是這樣

2018年8月27日 21:12
編輯回答
艷骨

回調(diào)方法啊,回調(diào)為什么一定是return:如下:

const onShareAppMessage = (para,callback) => {
    let shareId;
    wx.request({
        url: 'https://xxx/xxx.php',
        data: {para:para},
        success: function (res) {
            callback({
                path: shareId,
            })
        }
    })
}
2017年7月20日 12:49
編輯回答
選擇

因?yàn)榻Y(jié)果是異步返回的,所以你不能使用同步的方式-即直接獲得結(jié)果,所以你不知道該解決獲得結(jié)果之后的處理過(guò)程和這個(gè)不能直接獲得的結(jié)果,之間矛盾。

解決的辦法是使用callback,將上面提到的得到結(jié)果之后需要做的事情放在這個(gè)callback里,在得到結(jié)果之后執(zhí)行callback即可。

2017年5月29日 19:37
編輯回答
玄鳥

建議用promise

2017年11月17日 05:25
編輯回答
九年囚
const onShareAppMessage = new Promise(function(resolve, reject){
    let shareId;
    wx.request({
        url: 'https://xxx/xxx.php',
        data: {para:para},
        success: function (res) {
            resolve(res.data.shareId)
        },
        error: function(err) {
            reject(err)
        }
    })
})

//調(diào)用
onShareAppMessage().then((shareId) => {
    //xxxx
})
2017年5月17日 07:26