我试图在节点中实现一个shopify api,并希望同步调用post请求,因为我希望在发布后检索产品id并将其存储在数组中。我正在使用一个名为去异步的库作为同步等待循环。这个脚本以前曾经工作过,但突然停止了工作。但是,当我记录我的调用时,如果不使用de异步循环,则会从shopify返回响应,但是,当我使用de异步循环运行我的脚本时,我的标识符将保持为空,并且de异步循环将继续迭代。我对node.js中的异步请求比较陌生。标识符变量的作用域似乎是正确的。我现在唯一能想象的是,回调发生在一个并行的node.js宇宙中,它与我的while循环分离。任何帮助都是非常感谢的,泰克斯!
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;
}发布于 2015-11-26 20:25:53
所有这些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);
});
});
}https://stackoverflow.com/questions/33945820
复制相似问题