Was passiert, wenn wir "Callback" in einer Funktion verwenden? und wann müssen wir es verwenden?

Was passiert , wenn wir " callback" als Schlüsselwort in einer Funktion verwenden? Und wann müssen wir es verwenden? und was passiert, wenn wir es nicht verwenden? Zum Beispiel im folgenden JavaScript-Code:

function signPayment(recipient, amount, nonce, contractAddress, callback) {
  var hash = "0x" + ethereumjs.ABI.soliditySHA3(
    ["address", "uint256", "uint256", "address"],
    [recipient, amount, nonce, contractAddress]
  ).toString("hex");

  web3.personal.sign(hash, web3.eth.defaultAccount, callback);
}

Antworten (2)

Callback ist im Grunde eine Funktion, die an andere Funktionen übergeben und dort ausgeführt wird, wenn Sie diesen "Callback" aufrufen. Ein sehr einfaches Beispiel finden Sie in der Mozilla-Dokumentation .
Wenn Sie keinen Rückruf übergeben, kann dies je nach Funktionscode Ihr Programm beeinflussen oder auch nicht, da der Rückruf null ist.

Einige web3-Methoden sind asynchron und erfordern einen Rückruf.

Die Callback-Funktion wird ausgeführt, sobald die ursprüngliche Funktion abgeschlossen ist, und nimmt einen Transaktions-Hash oder ähnliches als Argument.

Sie können Rückrufe vollständig vermeiden, indem Sie ein async/await-Muster verwenden.

Zum Beispiel:

async function signPayment(recipient, amount, nonce, contractAddress) {
  var hash = "0x" + ethereumjs.ABI.soliditySHA3(
    ["address", "uint256", "uint256", "address"],
    [recipient, amount, nonce, contractAddress]
  ).toString("hex");

  var signed = await web3.personal.sign(hash, web3.eth.defaultAccount);
  console.log(signed);
}
@async @Maxpeinas Danke. Gibt es irgendwelche Vorteile für jeden der Ansätze: callbackvs. async? Danke
async macht immer noch einen Callback unter der Haube, also gibt es keinen Unterschied, außer dass die Verwendung von async Ihren Code einfacher macht
Siehe dies für einen Vergleich zwischen async/await und Callbacks: stackoverflow.com/questions/46336029/…
Danke schön. Ich muss nur diesen JavaScript-Code ausführen, um eine Zahlung per signPayment-Funktion zu signieren (vollständiger Code ist hier ). Also habe ich den JavaScript-Code in einer .jsDatei gespeichert (Sie können den Inhalt dieser .jsDatei hier sehen .) Wenn ich diese Datei jedoch über ausführe, node filename.jserhalte ich die Fehlermeldung, dass ich den Screenshot hier hochgeladen habe . Ich weiß nicht, wo ich falsch liege. Danke noch einmal.
@sas Sehen Sie sich diesen Kern an: gist.github.com/Kaisle/bece5cbdcac17385d2f8e0cfa7c6b095 . Ersetzen Sie einfach die Argumente durch die Argumente aus Ihrem Code (und ignorieren Sie das Callback-Argument, Sie brauchen es nicht)
Vielen Dank, jetzt erhalte ich eine Fehlermeldung im Zusammenhang mit ethereumjs-abi. Hier ist der Inhalt der Datei, die ich ausführe. Und hier ist die Fehlermeldung, die ich erhalte. ethereumjs-abiÜbrigens, wenn ich den in diesem Code verwendeten installieren möchte , erhalte ich diese Meldung . Ich bin mir nicht sicher, ob es richtig installiert ist. Danke
Haben Sie die Abhängigkeit mit require('ethereumjs-abi') oder ähnlichem in Ihre Datei aufgenommen?
Danke, ja, das hatte ich vergessen ... aber jetzt habe ich var abi = require('ethereumjs-abi')den Code oben hinzugefügt ([HIER] ( ibb.co/imjwPy )). Ich erhalte jedoch denselben Fehler ([HIER]( ibb.co/bWvWrd )). Danke
versuchen Sie Folgendes: var ethereumjs = require('ethereumjs-abi');
Gut, jetzt wird es erkannt ... aber ich erhalte einen neuen Fehler: [HIER ]( ibb.co/jZbonJ ) ( soliditySHA3) Nochmals vielen Dank
versuchen Sie es ohne ABI: ethereumjs.solidityShA3
Danke, es ist gelöst, aber ein neues ... hoffe es ist das letzte .... HIER ( sign) habe ich auch hinzugefügt Web3 = require("web3")und web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));nochmals danke
Ich habe web3.eth.personal.signstattdessen verwendet web3.personal.signund signist gelöst, aber der neue Fehler ist HIER: ibb.co/gAG2gd Nochmals vielen Dank
es liegt nicht daran web3.eth.defaultAccount? Wir brauchen keinen defaultAccountWert zu initiieren ? Danke