私はmeteorを使ってapiメソッドをビルドする必要があります。すぐにOKを返し、長時間の作業が終わったらwebhookをリクエストする必要があります。流星群側。 .thenの中でhttpリクエストを呼び出す
サンプルコードは、結果として、この
import { Meteor } from 'meteor/meteor';
let Promise = require('bluebird');
Meteor.startup(() => {
Picker.route('/', (params, req, res, next) => {
getAnimalName = Promise.promisify((cb) => {
setTimeout(() => {
cb(null, "porcupine");
}, 1000);
})()
getAnimalName.then((name) => {
HTTP.get('https://www.google.ru/#q='+name, (err, res) => {
if(! err){
console.log(res);
}
});
});
res.end("OK");
});
});
のように見える私は
W20160704-02:14:10.908(3)? (STDERR) Unhandled rejection Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.
W20160704-02:14:10.908(3)? (STDERR) at Object.Meteor._nodeCodeMustBeInFiber (packages/meteor/dynamics_nodejs.js:9:1)
W20160704-02:14:10.909(3)? (STDERR) at Object.Meteor.bindEnvironment (packages/meteor/dynamics_nodejs.js:85:1)
W20160704-02:14:10.909(3)? (STDERR) at Object.call (packages/meteor/helpers.js:117:1)
W20160704-02:14:10.909(3)? (STDERR) at Object.HTTP.get (packages/http/httpcall_common.js:50:20)
W20160704-02:14:10.909(3)? (STDERR) at server/main.js:14:10
W20160704-02:14:10.910(3)? (STDERR) at [object Object]._onTimeout (server/main.js:8:6)
W20160704-02:14:10.910(3)? (STDERR) at Timer.listOnTimeout [as ontimeout] (timers.js:121:15)
W20160704-02:14:10.910(3)? (STDERR) From previous event:
W20160704-02:14:10.911(3)? (STDERR) at server/main.js:12:18
W20160704-02:14:10.911(3)? (STDERR) at doCall (packages/meteorhacks_picker/packages/meteorhacks_picker.js:106:1)
このエラーを取得する私は約束のためにMeteor.bindEnvironment
へのコールバックといくつかの流星パッケージを包む、Fiber
にHTTP.get
を包むような別のものを試してみました。そして、エラーは同じでした。約束の中でhttpリクエストを行う方法がありますか.then
? (私のコードの大部分はすでに約束の点で書かれており、私はファイバーなどでそれをリファクタリングしたくありません)。ありがとう。