为什么这个异步函数将传递给它的参数变成Promise对象?

时间:2019-03-25 17:46:59

标签: javascript promise codeceptjs

  async scrape(locator) {
    console.log("Locator passed in is" + locator);
  }

为什么控制台日志显示[object Object]作为参数的输出?它不应该返回传入的值吗?

以下是调用该函数的代码:

Scenario('Scrape The Full Menu pricing and calorie data @scrapewebsite, {retries: 0}, async (I) => {
    I.waitForElement({"xpath":".//select"});
    rawMenuItems = await I.getElementsText({"xpath":".//*[contains(@data-ng-bind-html, 'item.title')]"});
    uniqueMenuItems = [...new Set(rawMenuItems)];
    for(let b = 0; b < uniqueMenuItems.length; b++ )
    {
      let locationVar = {"xpath":".//*[text()=\"" + uniqueMenuItems[b] + "\"]//following::*[@class=\"productControllers custom-product-ctrls\"][1]/div/div/select"};
      uniqueMenuItems[b] = uniqueMenuItems[b].replace(/®.*/, "");
      drinks[b] = await I.scrape(locationVar);
    }
    });

1 个答案:

答案 0 :(得分:3)

  

为什么控制台日志显示[object Object]作为参数的输出?它不应该返回传入的值吗?

该函数不会将任何东西变成其他东西。您要传递给scrapelocationVar的值已经是对象({"xpath": ...})。

您正在尝试将字符串对象连接起来。为此,JavaScript将对象转换为字符串,并且对象的默认字符串表示形式为[object Object]

console.log('' + {});
// same as
console.log({}.toString())

将对象作为第二个参数传递给console.log

console.log("Locator passed in is", locator);
//                                ^^

浏览器将在控制台中呈现该对象的更有用的表示形式。