添加一次从异步函数返回的值

时间:2018-08-17 18:35:58

标签: javascript asynchronous

以下代码正在访问API

“行”是一个对象,具有指向其他2个对象的链接

代码跟随链接在每个链接的另一端抓取对象,并从每个链接的对象检索整数属性值“ Cost”。然后将这些值求和并将结果写入原始对象的Total属性。

问题在于它的行为不可靠。有时它会正确地分配总和,但有时它只分配其中一个链接对象的值,而不是两个对象之和。

我在最里面的嵌套回调函数中执行了两次赋值,而不是在链接循环后执行一次赋值,因为由于JavaScript的异步性,我不知道如何在回调之外进行赋值-但我认为它甚至仍然可以工作尽管我可能没有按照应有的方式做。

结果的不可预测性表明这是一个异步性问题。

非常感谢收到任何建议。谢谢您对菜鸟的耐心。

function getLinks(row)
{   
    RM.Data.getLinkedArtifacts(row, [], function(linksResult) 
    {
        var linkedArtifactsTotal = 0;

        linksResult.data.artifactLinks.forEach(function(linkDefinition)
        {
            linkDefinition.targets.forEach(function(target)
            {
                getAttrVal(target, "Cost", function(result)
                {
                    linkedArtifactsTotal = linkedArtifactsTotal + result;
                    varStrResult = linkedArtifactsTotal + "";
                    setAttrVal(row, "Total", varStrResult)
                });
            });
        });

    });
}

function getAttrVal(ref, attrName, callback)
{   
    RM.Data.getAttributes(ref, attrName, function(result)
    {
        var attributes = result.data;

        attributes.forEach(function(attr)
        {
            var attrVal = attr.values[attrName];
            callback(attrVal);
        });
    });
}

function setAttrVal(ref, attrName, newValue)
{   
    // function that sets an attribute value
}

0 个答案:

没有答案