2016-05-10 1 views
3

私の現在のコードは、サイズ変更が、私は持っていたコールバックではないと呼ばれるNode.jsの

Resizer.prototype.read = function(filepath, parsedUrl, fullDestinationPath){ 
    something.then(function (somethingElse) { 
     // Not relevant for question 
    }).catch(function (err) { 
     console.error(err); 
    }); 
}; 

を呼び出し

Resizer.prototype.resize = function (filepath, parsedUrl, fullDestinationPath) { 
     this.read(filepath, parsedUrl, fullDestinationPath); 
}; 

に走る

resizer.resize(filepath, parsedUrl, fullDestinationPath, function() { 
     return self.send(response, 200, {'Content-Type': mime.lookup(fullDestinationPath)}, fs.createReadStream(fullDestinationPath)); 
    }); 

です this.readの後に2番目のコードスニペットが完全に実行されていることを確認します。しかし、私の最初のスニペットに戻って、私のコールバックを呼び出すことはありません。私がコールバックを使用している理由は、ファイルが非常に小さい場合を除き、ファイルが完全に保存される前に送信が実行されるためです。self.sendはアフター.resizeと呼ばれる必要がありますコールバック。

構文エラーが問題であるか、何かにぶら下がっていると思っていましたが、検証されておらず、単純にコールバックが呼び出されていないと考えました。私は何らかの明白な間違いをしましたか?コールバックを呼び出すにはどうしたらいいですか?

私はHow to make a function wait until a callback has been called using node.jsのような質問/回答を読んで、それがどのように動作し、同じ方法でそれを実装したかを理解していますが、それは私のためには機能しません。これを読んでいただきありがとうございます。ロバーツの答えと問題を修正した後、私は、コールバックを削除したし、これにコードを変更し、私はカントーの代わりにコールバックの約束を使用しています:EDIT

スニペット1:

resizer 
     .resize(filepath, parsedUrl, fullDestinationPath) 
     .then(function() { 
      return self.send(response, 200, {'Content-Type': mime.lookup(fullDestinationPath)}, fs.createReadStream(fullDestinationPath)); 
     }); 

スニペット2:

Resizer.prototype.resize = function (filepath, parsedUrl, fullDestinationPath) { 
    return this.read(filepath, parsedUrl, fullDestinationPath); 
}; 

スニペット3:

Resizer.prototype.read = function(filepath, parsedUrl, fullDestinationPath){ 
    return Jimp.read(filepath) 
     .then(function() { 
      return //tons of irrelevant code 
     }) 
     .catch(function (err) { 
      console.error(err); 
     }); 
}; 
+0

Resizer.prototype.resize = function (filepath, parsedUrl, fullDestinationPath, callback) { this.read(filepath, parsedUrl, fullDestinationPath, callback); }; 

とします。 –

+0

return self.send部分は呼び出されていない部分です。それをコールバックと呼んでいないのですか?また、console.logを使用して、私はそれがすべてのコードを実行していることを確認し、どこにでもぶら下がっていない、それはちょうどリターンに到達していません。自己は単なるvar self = thisです。コードの上部に、別の関数を置いたときにこの意味が変わってしまうからです。 –

+0

'self.send()'は、あなたが 'resize'の引数として渡す匿名関数定義の中のコマンドですが、' resize'はそのパラメータリストでコールバックを受け付けません(filepath、 parsedUrlとfullDestinationPath) – OzW

答えて

4

Resizer.prototype.resizeは、最初にコールバック引数をとらないので、メインコードから渡しても何もしません。

this.read()も同じです:コールバック引数もありません。

このお試しください:私はすべてのコールバックが渡さたり、サイズ変更機能で使用されて表示されていない

Resizer.prototype.read = function(filepath, parsedUrl, fullDestinationPath, callback){ 
    something.then(function (somethingElse) { 
    callback(null, somethingElse); 
    }).catch(function (err) { 
    console.error(err); 
    callback(err); 
    }); 
}; 
+0

これは今働いていただきありがとうございます。私はパラメータとしてコールバックを渡さなければならないことを認識していませんでした。私は2番目のスニペットを少し編集して動作させる必要がありました。私は私のメインポストで使った。 –

+0

コールバックについては特別なことは何もありません。操作が完了したら一度呼び出されて呼び出される関数です。D – robertklep

+0

ありがとう、コールバックを正しく使用する方法を今忘れないでください。 –

関連する問題