Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js中的并行回调宇宙?_Javascript_Node.js_Asynchronous_Synchronous_Node Async - Fatal编程技术网

Javascript 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

我试图在node中实现shopifyapi,并希望同步调用post请求,因为我希望在发布后检索产品id并将其存储在数组中。我正在使用一个称为同步等待循环的库。这个脚本以前很有效,但突然停止了工作。 当我在没有deasync循环的情况下记录调用时,我看到响应是从shopify返回的,然而,当我使用deasync循环运行脚本时,我的标识符保持为空,并且deasync循环不断迭代。我对node.js中的异步请求比较陌生。标识符变量的范围似乎正确。现在我唯一能想象的是回调发生在与while循环分离的parallel node.js宇宙中。任何帮助都将不胜感激,谢谢

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
成为标准之前创建的。我自己的方式是->->es6
Promise
我将async.js视为一个更高级别的实用工具带-它提供的功能远远超过您所能获得的功能promises@Robbie,在大多数情况下,您不需要这些
瀑布
货物
。当然,这是一个很棒的图书馆。