Javascript node.js中的并行回调宇宙?
我试图在node中实现shopifyapi,并希望同步调用post请求,因为我希望在发布后检索产品id并将其存储在数组中。我正在使用一个称为同步等待循环的库。这个脚本以前很有效,但突然停止了工作。 当我在没有deasync循环的情况下记录调用时,我看到响应是从shopify返回的,然而,当我使用deasync循环运行脚本时,我的标识符保持为空,并且deasync循环不断迭代。我对node.js中的异步请求比较陌生。标识符变量的范围似乎正确。现在我唯一能想象的是回调发生在与while循环分离的parallel node.js宇宙中。任何帮助都将不胜感激,谢谢Javascript node.js中的并行回调宇宙?,javascript,node.js,asynchronous,synchronous,node-async,Javascript,Node.js,Asynchronous,Synchronous,Node Async,我试图在node中实现shopifyapi,并希望同步调用post请求,因为我希望在发布后检索产品id并将其存储在数组中。我正在使用一个称为同步等待循环的库。这个脚本以前很有效,但突然停止了工作。 当我在没有deasync循环的情况下记录调用时,我看到响应是从shopify返回的,然而,当我使用deasync循环运行脚本时,我的标识符保持为空,并且deasync循环不断迭代。我对node.js中的异步请求比较陌生。标识符变量的范围似乎正确。现在我唯一能想象的是回调发生在与while循环分离的pa
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;
}
所有这些
deasync
解决方案都不可能是稳定的,因为它们依赖于内部引擎实现
试着用异步的方式学习。这真的很简单
本机承诺的简化示例
:
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);
});
});
}
你不应该在第一次勾选后进行任何类型的同步I/O。我的想法来自:是的,这真的不是一个很好的主意。@jov:嗯,就是这样。一个主意。有概念证明。除非你确切知道自己在做什么,否则不应该真正使用它。好吧,谢谢你指出这一点,但在这种情况下,你知道为什么回调似乎永远不会发生吗?它不是真正的“解决方法”。。。只是一个更好的方式做它有趣的,将尝试和这个工作。在前面查看Async()库时,似乎非常类似于
Promise
源于node v0.12
,Async
是在Promise
成为标准之前创建的。我自己的方式是->->es6Promise
我将async.js视为一个更高级别的实用工具带-它提供的功能远远超过您所能获得的功能promises@Robbie,在大多数情况下,您不需要这些瀑布
和货物
。当然,这是一个很棒的图书馆。