2016-08-27 3 views
2

私のzapierコードから3つの異なるapi呼び出しを行い、それらの戻り値を変数に取り込み、それらをマージしたいと思います。私はそれを行う方法を理解することはできません。それは次のようになります:zapierコードのループでフェッチを使用

var urls = [apiUrl1, apiUrl2, apiUrl3]; 
var output = []; 

for (i = 0; i < urls.length; i++) { 
    output[i] = fetch(urls[i]); 
} 

これはコード例です。私は出力に応答を得ることができません、それは空白のオブジェクト{}だけを取得します。フェッチ戻り値を出力配列に保存する手順は何ですか?あなたは上でブラッシュアップする必要があります

答えて

1

2つのこと:

  1. 約束 - 特にPromise.all() - そのことについてそこにたくさんあります。
  2. データを非同期で返すコールバック。私たちのヘルプ文書でこれについて説明しています。

コードが失敗する主な理由は、フェッチが直ちに発生すると仮定しているためです。 JavaScriptではそうではありません - 非同期が発生し、コールバックを介して出力を返す前に、それらが完了するまで約束とコールバックを使用しなければなりません!

4

明らかZapierの人々がここに...作業例やコードの複雑さのこのレベルのためのまともなドキュメントの任意の並べ替えを与えることを好きではないので作業例です:

var promises = []; 

for (var i = urls.length - 1; i >= 0; i--) { 
    promises.push(fetch(urls[i])); 
} 

Promise.all(promises).then(function(res){ 
    var blobPromises = []; 
    for (var i = res.length - 1; i >= 0; i--) { 
     blobPromises.push(res[i].text()); 
    } 
    return Promise.all(blobPromises); 
}).then(function(body){ 
    var output = {id: 1234, rawData: body}; 
    callback(null, output); 
}).catch(callback); 

これはないかもしれません最もクリーンなソリューションですが、それは私のために働きます。乾杯!

+0

私は次のようになります。Promise.allは関数ではありません – Eric

+0

@Eric - 1.これをzap内のjavascriptコードアクションとして実行しようとしていますか? Zapierには依然としてPromise.all()の組み込みサポートがあります。 Zapier以外でこれを試している場合は、https://www.npmjs.com/package/promiseの要件としてPromiseパッケージを追加する必要があります。 2. Promise.all()は配列を要求します。 Promise.all()に配列を渡していますか? 3. 2または3のいずれも表示されない場合は、使用に関する詳細情報が必要になります。 – Lars

+0

ザップサイト上のコードスクリプトとしてyea。 – Eric

関連する問題