执行以下功能时:
try {
Auction.deployed().then(function(contractInstance) {
contractInstance.startAuction(auctionname, duration, { from: buyerAddress }).then(function(result) {
console.log("AUCTION HAS STARTED!!");
console.log(result);
updateAuction(result.receipt);
});
});
} catch (err) {}
}
};
updateAuction = function(data) {
console.log("UPDATE AUCTIONS!");
....
不调用updateAuction函数(即使console.log函数正常工作并显示消息)。如何调用updateAuction函数?
答案 0 :(得分:1)
这是因为您定义了承诺和功能的顺序。
当您使用语法updateAuction = function () {}
时,无论您是否使用var
,都必须在承诺代码上方定义它,否则它将无法使用。这与你编写以下内容的方式相同,它不起作用:
var b = a;
var a = 'Hello!';
这似乎很明显a
在定义之前不可用。同样的事情适用于函数:
var b = function () {
a();
}
var a = function () {
console.log('Hello');
}
b
函数无法访问a
,因为它尚未定义。
但是,如果您使用function updateAuction() {}
的定义,它将被悬挂,这意味着它先于其他任何内容定义。
有许多关于吊装工作的文章,例如this one from scotch.io和this from Mozilla
答案 1 :(得分:-3)
您必须先尝试定义您的功能。像这样纠正它
var updateAuction = function(data) {
console.log("UPDATE AUCTIONS!");
...
}
try {
Auction.deployed().then(function(contractInstance) {
contractInstance.startAuction(auctionname, duration, { from: buyerAddress }).then(function(result) {
console.log("AUCTION HAS STARTED!!");
console.log(result);
updateAuction(result.receipt);
});
});
} catch (err) {}
;
答案 2 :(得分:-3)
var updateAuction = function(data) {
console.log("UPDATE AUCTIONS!");
...
}
try {
Auction.deployed().then(function(contractInstance) {
contractInstance.startAuction(auctionname, duration, { from: buyerAddress }).then(function(result) {
console.log("AUCTION HAS STARTED!!");
console.log(result);
updateAuction(result.receipt);
});
});
} catch (err) {}