如何从promise函数调用全局函数?

时间:2017-12-09 19:37:09

标签: javascript promise

执行以下功能时:

        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函数?

3 个答案:

答案 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.iothis 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) {}