以下のコードで何がうまくいかないのか理解できません。私はimportOrder
と呼ばれる関数を持っています。これは、指定されたオブジェクトを新しい注文オブジェクトに変換することによって注文をインポートします。私がしたいのは、指定されたオブジェクト内の各製品(line_item
)について、製品の詳細を取り出して新しい注文オブジェクト(newOrder.products
)に追加することです。問題は配列が常に空であることです。特注コードノード非同期の説明が必要
'use strict';
var Promise = require('promise');
var Order = require('./models/order');
var shopifyAPI = require('shopify-node-api');
var config = require('config');
var orderImporter = {
importOrderFromShopify: function (shopifyOrder) {
return new Promise(function(fulfill, reject){
var newOrder = new Order({
external_id: shopifyOrder.name,
status: 'Awaiting Fulfillment',
date_created: shopifyOrder.created_at,
subtotal_inc_tax: shopifyOrder.subtotal_price,
tracking_number: "",
order_source: "www",
payment_method: "Credit Card",
invoice_printed_at: null,
packing_slip_printed_at: null,
products: [], // this is the array I would like to populate with product details fetched from shopify
product_options: []
});
shopifyOrder.line_items.forEach(function(lineItem){
var productId = lineItem.product_id;
var product = {};
(function(newOrder){
loadProductImage(productId)
.then(function(imageUrl){
product.image = imageUrl;
newOrder.products.push(product);
}, function(error){
console.log(error);
});
})(newOrder);
});
newOrder.save(function(error){
if (error){
reject(error);
} else {
fulfill(newOrder);
}
});
});
function loadProductImage(productId){
return new Promise(function(fulfill, reject){
var shopifyClient = new shopifyAPI({
shop: config.get('shopify_config.shop'),
shopify_api_key: 'xxxx',
shopify_shared_secret: 'yyyyy',
access_token: 'zzzzzzzz',
verbose: false
});
shopifyClient.get('/admin/products/' + productId + '/images.json', function(error, data){
if(error){
reject(error);
} else {
fulfill(data.images[0].src);
}
});
});
}
}
};
module.exports = orderImporter;
@jonrsharpe私の投稿をフォーマットしていただきありがとうございます - あなたの変更により、他の人が読むことがもっと簡単になりました! – Ben
問題はありませんが、[mcve]を追加する必要があります。これは、このスニペットだけでなく、入力と予想される出力と実際の出力を示します。 – jonrsharpe