无法通过异步方法传递数组

时间:2017-04-10 12:48:47

标签: javascript arrays asynchronous meteor helpers

我正在建造一个与以太坊区块链相连的Dapps。我有一个JavaScript函数,可以在里面调用异步方法。

async function getFiles(id, array){
    if(id < 2){
        myContract.consultFile.call(id,"0x2b461Db580028F263351B969cFd8542db696787E",function(err, res){
            array.push({title : res[0], description : res[1]});
            getFiles(++id, array);
        });
    }
    return array;
}

第一种方法应该是异步的吗?

然后我在我的助手中有一个调用前一个函数的函数。这是我得到的最接近的版本,但它返回了一个承诺对象 使用此版本,我可以看到[{1}} [[PromiseValue]]是正确的 但是当我尝试使用{{#each files}}在我的视图中使用下面的代码显示它时,没有任何事情发生,而如果我返回tmp,我可以看到[Object Promise]。 阵列好发送?我应该如何显示数组?

console.log()

1 个答案:

答案 0 :(得分:0)

function displayFile(callback){
    callback(0,[]);
}

function getFiles(id, array){
    while(id++ < 2){
         myContract.consultFile.call(id,"0x2b461Db580028F263351B969cFd8542db696787E",function(err, res){
        array.push({title : res[0], description : res[1]});
    }
    console.log(array);

}
displayFile(getFiles);

上面的代码应该允许异步函数通过使用回调来正确运行,回调强制等待异步调用成功完成,此时回调下面的所有内容也将运行。不幸的是,由于回调是异步的,因此您无法将值返回到同步函数。但是如果数组是全局的,那么在调用displayFile(getFiles)之后它应该具有你想要的值。

This可能更有助于理解javascript中的回调和异步编程