2016-08-12 57 views
0

我在token參數進行AJAX調用從StripeCheckout.configure({ }),像這樣:條紋充電承諾不能解決

StripeCheckout.configure({ 
    ..., 
    token: function(stripeToken) { 
    $.post(url, { 
     // post data 
    }, function(data) { 
     console.log("data", data); 
     return data; 
    }); 
    } 
}); 

在接收AJAX調用的URL(我們稱之爲/charge),我有這樣的代碼:

const charge = (req, res) => { 
    const { 
    // get AJAX post data, e.g amount, description, STRIPE_TOKEN, etc 
    } = req.body 
    return stripe.charges.create({ 
    amount: amount, 
    currency: 'gbp', 
    source: STRIPE_TOKEN, 
    description: description, 
    }) 
    .then((charge) => { 
    const {params} = charge // get various parameters from the successful charge data to be passed into book() 
    return book(params) // promise function which goes to an external provider 
    .then((data) => { 
     return data // data returns from book and is then lost between here and the original AJAX callback 
    }) 
    }).catch((err) => { 
    console.log(err) 
    }) 
} 

,你可以從註釋中看到,在充電功能的data是正確的,但後來這一承諾和原來的AJAX調用之間,它失去了和AJAX調用將一無所獲。如果我查看Chrome devtools中的網絡請求,它會說charge收到數據,但由於AJAX呼叫未收到響應數據,因此超時。

我想我一直在尋找這個太長時間,並可能犯了一個超級簡單而愚蠢的錯誤。

+0

a)您不''從'then'回調''返回'book(...)'承諾b)您在哪裏寫回應? – Bergi

+0

嗨@Bergi,謝謝我添加了返回英寸我也意識到我忘了添加一個'console.log'到AJAX調用來寫入返回的數據(在我的代碼中,但沒有在這裏)。然而,有了這兩個補充,它仍然沒有返回任何東西:( –

+0

'console.log'寫入控制檯,而不是HTTP響應。您可能需要類似'res.json(data)'(但我不知道Stripe API) – Bergi

回答

1

在@Bergi的幫助下發表了評論(感謝Bergi!)。

這裏是爲我工作的,發送自許的更新回原來的Ajax請求的代碼:

const charge = (req, res) => { 
    // rest of the promise 
    .then((data) => { 
     res.json(data) 
    }) 
    }).catch((err) => { 
    console.log(err) 
    }) 
} 

這樣做的原因基本上是,AJAX請求被擊中的頁面(/charge我的情況),開展工作來獲取數據,但返回它不做任何事情,就像在前端應用程序中一樣,除非您正在使用它(分配給變量,使用該數據運行另一個函數等)。 ),它會丟失。它需要以JSON格式輸出到頁面,以便請求可以看到它。