nodejs-Osmosis:如何将结果传递给其他函数?

时间:2018-02-25 11:10:51

标签: node.js function variables

我找到了这个nodejs包,我的工作代码正确,结果正确。但是,我不知道如何将这些结果传递给其他函数。我想要的是:从网页获取一些信息,将其存储在变量中,传递给信号函数并发送信号通知(我使用的是信号节点包)。 这是我现在的代码:

osmosis
.get('url')
.find('.content_body_left li')
.set('day')
.follow('a@href')
.find('table tr')
.delay(1000)
.set({
  city: 'td[2]',
  street: 'td[3]',
  time:'td[4]'
})
.data(function(document) {
   var city = document['city'];  // <== this variable I want to get
   return city;
})
var firstNotification = new OneSignal.Notification({
    contents: {
     // en: "test msg"
        en: city // <== this is where I want to put variable
    }
});

问题是我无法从document['city'];中获取.data(function(document) { ... })值,因此我无法在代码中的任何位置使用它。

编辑: 我在.data(function(document) { ... })

之后也有这段代码
firstNotification.setIncludedSegments(['All']);
firstNotification.setExcludedSegments(['Inactive Users']);
firstNotification.setParameter('data', {"abc": "123", "foo": "bar"});
myClient.sendNotification(firstNotification, function (err, httpResponse,data) {
   if (err) {
       console.log('Something went wrong...');
   } else {
       console.log(data, httpResponse.statusCode);
   }
});

所以,如果我把var firstNotification = new OneSignal.Notification({ ... });说成:“firstNotification未定义”。但是,如果我将所有代码放在.data(function(document) { ... })或承诺中,它就会起作用。但是,有没有办法将其他一半的代码保留在.data(或promise)之外?

2 个答案:

答案 0 :(得分:2)

您可以包装逻辑以获取Promise中的city

var promise = new Promise(resolve => {
  osmosis
  .get('url')
  .find('.content_body_left li')
  .set('day')
  .follow('a@href')
  .find('table tr')
  .delay(1000)
  .set({
    city: 'td[2]',
    street: 'td[3]',
    time:'td[4]'
  })
  .data(function(document) {
     var city = document['city'];  // <== this variable I want to get
     resolve(city);
  })
});


promise.then(city => {
  var firstNotification = new OneSignal.Notification({
    contents: {
     // en: "test msg"
        en: city // <== this is where I want to put variable
    }
  });
})

答案 1 :(得分:0)

尝试

osmosis
.get('url')
.find('.content_body_left li')
.set('day')
.follow('a@href')
.find('table tr')
.delay(1000)
.set({
  city: 'td[2]',
  street: 'td[3]',
  time:'td[4]'
})
.data(function(document) {
   var firstNotification = new OneSignal.Notification({
        contents: {
            // en: "test msg"
            en: document.city // <== this is where I want to put variable
        }
   });
})