Shopify购买SDK - 添加订单项错误

时间:2018-03-12 03:50:29

标签: javascript sdk shopify

我正在使用shopify购买SDK来创建自定义店面:

  • 尝试添加订单项时收到错误
  • 下面的示例代码都有效,除非它遇到'addLineItems'方法:我已经检查了参数,看起来没问题。

shopify.checkout.create().then((checkout) => {
  checkoutId = checkout.id
  console.log('checkout id: ' + checkoutId) // Works OK
})

shopify.product.fetchAll().then((products) => {
  lineItemsToAdd = [
    {variantId: products[0].variants[0].id, quantity: 1}
  ]
  console.log('line items to add: ' + lineItemsToAdd) // Works OK
})

shopify.checkout.addLineItems(checkoutId, lineItemsToAdd).then((checkout) => {
  console.log('checkout line items: ' + checkout.lineItems)
}) // Throws error

我得到的错误是:

index.js?7327:3705 Uncaught (in promise) TypeError: Cannot read property 'checkoutLineItemsAdd' of undefined
at eval (index.js?7327:3705)
at <anonymous>

1 个答案:

答案 0 :(得分:3)

问题正在发生,因为Javascript本质上是异步的。

所有的呼叫都在同一时间执行而不是后果。因为checkoutId, lineItemsToAdd正在执行时未设置addLineItems个变量。

您需要使用promises来创建序列。你可以阅读它here。带有promise的代码示例:

<script>

const client = ShopifyBuy.buildClient({
  domain: '-----------------------',
  storefrontAccessToken: '--------'
});
var checkoutPromise = client.checkout.create()
var productPromise = client.product.fetchAll()


Promise.all([checkoutPromise,productPromise]).then(([checkout,products]) => 
{
    var lineItemsToAdd = [
        {variantId: products[0].variants[0].id, quantity: 1}
      ]
    var checkoutId = checkout.id

    console.log('checkout id: ' + checkoutId)       
    console.log('line items to add: ' + lineItemsToAdd)

    client.checkout.addLineItems(checkoutId, lineItemsToAdd).then((checkout) => {
        console.log('checkout line items: ' + checkout.lineItems)
    })
})
</script>

P.S。上面的代码是not supported in IE