我正在尝试在节点中实现shopify api,并希望同步调用post请求,因为我想在发布后检索产品ID并将其存储在数组中。我正在使用名为deasync的库作为同步等待循环。该脚本以前用于工作并突然停止工作。 当我在没有deasync循环的情况下记录我的调用时,我看到从shopify返回响应,但是,当我使用deasync循环运行我的脚本时,我的标识符保持为null,并且deasync循环继续迭代。我对node.js中的异步请求比较新。我的标识符变量的范围似乎是正确的。我现在唯一想象的是回调发生在与我的while循环分开的并行node.js Universe中。任何帮助都会非常感激,谢谢!
function postProduct(Store, product, variants) {
var identifier = null;
var post_data = {
"product": product
};
Shopify.post('/admin/products.json', post_data, function(err, data, headers) {
identifier = {
id: data.product.id,
price: data.product.price,
variants: variants
};
});
while(identifier === null) {
require('deasync').runLoopOnce();
}
return identifier;
}
答案 0 :(得分:3)
所有这些deasync
解决方案都不稳定,因为它们依赖于内部引擎实现。
尝试学习异步方式。这很简单。
原生Promise
的简化示例:
var products = [
{Store: {}, product: {}, variant: {}},
{Store: {}, product: {}, variant: {}},
];
Promise.all(products.map(postProduct)).then(function(identifiers){
// use identifiers
});
function postProduct(data) {
return new Promise(function(ok, fail){
Shopify.post(...., function(){
//...
ok(identifier);
});
});
}